import { z } from 'zod';
import { isValidPhoneNumber } from 'react-phone-number-input';

/**
 * Schéma partagé des formulaires de capture « lead » (livre blanc + estimation) — copie conforme du
 * formulaire client : Prénom, Nom, E-mail pro, Nom de l'entreprise (tous requis) + case opt-in communications.
 * Toutes propriétés Contact standard. Le téléphone est optionnel par défaut (livre blanc) ;
 * il devient requis via leadSchemaWithPhone (ex. /estimation, dont le formulaire HubSpot exige mobilephone).
 */
export const leadSchema = z.object({
  firstName: z.string().min(2, 'Prénom requis'),
  lastName: z.string().min(2, 'Nom requis'),
  email: z.string().email('Email invalide'),
  company: z.string().min(2, "Nom de l'entreprise requis"),
  phone: z.string().optional(),
  comms: z.boolean().optional(),
});

/** Variante avec téléphone requis : le formulaire HubSpot estimation/ROI exige `mobilephone`. */
export const leadSchemaWithPhone = leadSchema.extend({
  phone: z
    .string()
    .min(1, 'Téléphone requis')
    .refine((v) => isValidPhoneNumber(v), 'Numéro de téléphone invalide'),
});

export type LeadFormValues = z.infer<typeof leadSchema>;

export const leadDefaultValues: Partial<LeadFormValues> = {
  firstName: '',
  lastName: '',
  email: '',
  company: '',
  phone: '',
  comms: false,
};

export const fieldLabels: Record<string, string> = {
  firstName: 'Prénom',
  lastName: 'Nom',
  email: 'E-mail professionnel',
  company: "Nom de l'entreprise",
  phone: 'Numéro de téléphone',
  comms: 'Communications',
};
