import { z } from "zod";

// ─── Rate Card Line ──────────────────────────────────────────────────────────

export const CreateRateCardLineSchema = z.object({
  roleId: z.string().optional(),
  chapter: z.string().max(200).optional(),
  location: z.string().max(200).optional(),
  seniority: z.string().max(100).optional(),
  workType: z.string().max(100).optional(),
  serviceGroup: z.string().max(100).optional(),
  costRateCents: z.number().int().min(0),
  billRateCents: z.number().int().min(0).optional(),
  machineRateCents: z.number().int().min(0).optional(),
  attributes: z.record(z.unknown()).default({}),
});

export const UpdateRateCardLineSchema = CreateRateCardLineSchema.partial();

export type CreateRateCardLineInput = z.infer<typeof CreateRateCardLineSchema>;
export type UpdateRateCardLineInput = z.infer<typeof UpdateRateCardLineSchema>;

// ─── Rate Card ───────────────────────────────────────────────────────────────

export const CreateRateCardSchema = z.object({
  name: z.string().min(1).max(300),
  currency: z.string().length(3).default("EUR"),
  effectiveFrom: z.coerce.date().optional(),
  effectiveTo: z.coerce.date().optional(),
  source: z.string().max(200).optional(),
  clientId: z.string().optional(),
  lines: z.array(CreateRateCardLineSchema).default([]),
});

export const UpdateRateCardSchema = z.object({
  name: z.string().min(1).max(300).optional(),
  currency: z.string().length(3).optional(),
  effectiveFrom: z.coerce.date().nullable().optional(),
  effectiveTo: z.coerce.date().nullable().optional(),
  source: z.string().max(200).nullable().optional(),
  clientId: z.string().nullable().optional(),
  isActive: z.boolean().optional(),
});

export type CreateRateCardInput = z.infer<typeof CreateRateCardSchema>;
export type UpdateRateCardInput = z.infer<typeof UpdateRateCardSchema>;
