import { z } from 'zod';
import { getMinimumLegalSalary } from '@/lib/compliance/salary-rules';

export const jobSchema = z.object({
  title: z.string().min(3),
  description: z.string().min(30),
  missions: z.string().min(30),

  candidateProfile: z.string().min(20),

  salaryUnit: z.enum(['monthly', 'annual']),
  salaryMin: z.number(),
  salaryMax: z.number().optional(),

  offerType: z.enum(['standard', 'premium']).default('standard'),

  skills: z.array(z.string()).max(5),
  softSkills: z.array(z.string()).max(5),
  benefits: z.array(z.string()),
  seniorAdaptations: z.array(z.string()),
  constraints: z.array(z.string()),
}).superRefine((val, ctx) => {
  const isSeniorContext = true; // JoBBond = plateforme senior
  const legalMin = getMinimumLegalSalary(val.salaryUnit, {
    isSenior: isSeniorContext,
  });

  if (val.salaryMin < legalMin) {
    ctx.addIssue({
      code: z.ZodIssueCode.custom,
      path: ['salaryMin'],
      message: `Le salaire minimum légal applicable est de ${legalMin} €.`,
    });
  }

  if (val.salaryMax && val.salaryMax < val.salaryMin) {
    ctx.addIssue({
      code: z.ZodIssueCode.custom,
      path: ['salaryMax'],
      message: 'Le salaire maximum doit être supérieur au minimum.',
    });
  }
});

export type JobFormData = z.infer<typeof jobSchema>;

export const emptyJob: JobFormData = {
  title: '',
  description: '',
  missions: '',
  candidateProfile: '',
  salaryUnit: 'monthly',
  salaryMin: 0,
  salaryMax: undefined,
  offerType: 'standard',
  skills: [],
  softSkills: [],
  benefits: [],
  seniorAdaptations: [],
  constraints: [],
};
