import { z } from "zod";

export const rentalItemSchema = z.object({
  equipmentId: z.string().min(1, "Selecione o equipamento."),
  quantity: z.number().min(1, "Quantidade mínima é 1."),
  dailyRate: z.number().min(0, "A diária deve ser maior ou igual a zero."),
});

export const rentalInstallmentSchema = z.object({
  dueDate: z.string().min(1, "Informe a data de vencimento da parcela."),
  amount: z.number().min(0, "O valor da parcela deve ser maior ou igual a zero."),
});

export const rentalSchema = z
  .object({
    customerId: z.string().min(1, "Selecione o cliente."),
    startDate: z.string().min(1, "Informe a data de início da locação."),
    endDate: z.string().min(1, "Informe a data de término da locação."),
    freight: z.number().min(0, "Frete deve ser maior ou igual a zero.").optional(),
    depositAmount: z.number().min(0, "O sinal deve ser maior ou igual a zero.").optional(),
    paymentMethod: z.string().optional(),
    installmentsCount: z.number().min(1).optional(),
    installments: z.array(rentalInstallmentSchema).optional(),
    discount: z.number().min(0, "Desconto deve ser maior ou igual a zero.").optional(),
    operator: z.string().optional(),
    notes: z.string().optional(),
    status: z.enum(["QUOTE", "RESERVED", "IN_PROGRESS", "FINISHED", "CANCELED"]),
    items: z
      .array(rentalItemSchema)
      .min(1, "Adicione pelo menos 1 equipamento ao contrato de locação."),
  })
  .refine(
    (data) => {
      const start = new Date(data.startDate);
      const end = new Date(data.endDate);
      return end >= start;
    },
    {
      message: "A data final deve ser igual ou posterior à data inicial.",
      path: ["endDate"],
    }
  );

export type RentalFormValues = z.infer<typeof rentalSchema>;
