import { z } from "zod";
import { countries, legalForms } from "../../data/company";

// //----------------------------------------------------------------------------------------

// export const joinCompanySchema = z.object({
//   companyId: z.string({ required_error: "L'entreprise est obligatoire" }),
// });

// export type JoinCompanySchema = z.infer<typeof joinCompanySchema>;

//----------------------------------------------------------------------------------------

export const companySchema = z.object({
  name: z
    .string({ required_error: "La raison sociale est obligatoire" })
    .min(1, "La raison sociale est obligatoire")
    .max(250, "250 caractères au maximum"),
  legalForm: z.enum(legalForms, {
    required_error: "La forme juridique est obligatoire",
    invalid_type_error: "La forme juridique est invalide",
  }),

  cityId: z
    .string({ required_error: "La ville est obligatoire" })
    .min(1, "La ville est obligatoire"),
  address: z
    .string({ required_error: "L'adresse est obligatoire" })
    .min(1, "L'adresse est obligatoire"),
  phoneNumber: z.string().max(250, "250 caractères au maximum"),
  fax: z.string().max(250, "250 caractères au maximum"),
  email: z
    .string({ required_error: "L'adresse mail est obligatoire" })
    .email({ message: "L'adresse mail est invalide" })
    .max(250, "250 caractères au maximum"),
  website: z.string().max(250, "250 caractères au maximum"),
  linkedin: z.string().max(250, "250 caractères au maximum"),
  facebook: z.string().max(250, "250 caractères au maximum"),

  contactFirstName: z
    .string({
      required_error: "Le prénom du contact est obligatoire",
    })
    .max(250, "250 caractères au maximum"),
  contactLastName: z
    .string({
      required_error: "Le nom du contact est obligatoire",
    })
    .max(250, "250 caractères au maximum"),
  contactEmail: z
    .string({ required_error: "L'adresse mail du contact est obligatoire" })
    .email({ message: "L'adresse mail du contact est invalide" })
    .max(250, "250 caractères au maximum")
    .or(z.literal("")),
  contactPositionId: z
    .string({ required_error: "La fonction est obligatoire" })
    .min(1, "La fonction est obligatoire")
    .optional(),
  contactLinkedin: z.string().max(250, "250 caractères au maximum"),
  contactFacebook: z.string().max(250, "250 caractères au maximum"),

  businessLicense: z.string().max(250, "250 caractères au maximum"),
  numRC: z.string().max(250, "250 caractères au maximum"),
  numICE: z.string().max(250, "250 caractères au maximum"),
  capital: z.number().nullable(),

  turnoverId: z
    .string({ required_error: "Le chiffre d'affaires est obligatoire" })
    .min(1, "Le chiffre d'affaires est obligatoire"),
  nEmployeesId: z
    .string({ required_error: "L'effectif est obligatoire" })
    .min(1, "L'effectif est obligatoire"),

  activitiesFamilies: z.array(z.string()),
  activities: z.array(z.string()),
  importCountries: z.array(z.enum(countries)),
  exportCountries: z.array(z.enum(countries)),
});

export type CompanySchema = z.infer<typeof companySchema>;

//----------------------------------------------------------------------------------------

export const acceptDeclineJoinRequestSchema = z.object({
  accepted: z.boolean(),
});

export type AcceptDeclineJoinRequestSchema = z.infer<
  typeof acceptDeclineJoinRequestSchema
>;
