import { z } from 'zod';

export const ETAPAS_FUNIL = ['lead', 'proposta', 'negociacao', 'ganho', 'perdido'] as const;
export type EtapaFunil = (typeof ETAPAS_FUNIL)[number];

export const OportunidadeSchema = z.object({
  id: z.number(),
  idCliente: z.number().nullable(),
  nomeProspect: z.string().nullable(),
  empresaProspect: z.string().nullable(),
  titulo: z.string(),
  etapa: z.enum(ETAPAS_FUNIL),
  valorEstimado: z.string().nullable(),
  observacoes: z.string().nullable(),
  idPedido: z.string().nullable(),
  createdAt: z.string(),
  updatedAt: z.string(),
  nomeCliente: z.string().nullable(),
});
export type Oportunidade = z.infer<typeof OportunidadeSchema>;

export const CreateOportunidadeSchema = z.object({
  idCliente: z.number().int().positive().nullable().optional(),
  nomeProspect: z.string().max(200).nullable().optional(),
  empresaProspect: z.string().max(200).nullable().optional(),
  titulo: z.string().min(1).max(200),
  etapa: z.enum(ETAPAS_FUNIL).default('lead'),
  valorEstimado: z.number().positive().nullable().optional(),
  observacoes: z.string().max(2000).nullable().optional(),
});
export type CreateOportunidadeDto = z.infer<typeof CreateOportunidadeSchema>;

export const UpdateOportunidadeSchema = CreateOportunidadeSchema.partial().extend({
  idPedido: z.string().nullable().optional(),
});
export type UpdateOportunidadeDto = z.infer<typeof UpdateOportunidadeSchema>;

export const FunilResponseSchema = z.object({
  lead: z.array(OportunidadeSchema),
  proposta: z.array(OportunidadeSchema),
  negociacao: z.array(OportunidadeSchema),
  ganho: z.array(OportunidadeSchema),
  perdido: z.array(OportunidadeSchema),
});
export type FunilResponse = z.infer<typeof FunilResponseSchema>;
