import { z } from 'zod';

// ─── Desempenho vs. Meta ─────────────────────────────────────────────────────

export const ReportMetaQuerySchema = z.object({
  mes: z.coerce.number().int().min(1).max(12),
  ano: z.coerce.number().int().min(2000).max(2100),
});
export type ReportMetaQuery = z.infer<typeof ReportMetaQuerySchema>;

export const ReportMetaResponseSchema = z.object({
  mes: z.number(),
  ano: z.number(),
  realizado: z.string(),
  meta: z.string(),
  percentual: z.string(),
  comissaoEstimada: z.string(),
  totalPedidos: z.number(),
});
export type ReportMetaResponse = z.infer<typeof ReportMetaResponseSchema>;

// ─── Carteira de Clientes ────────────────────────────────────────────────────

export const CarteiraClienteSchema = z.object({
  idCliente: z.number(),
  nome: z.string().nullable(),
  razao: z.string().nullable(),
  ativo: z.number(),
  ultimoPedido: z.string().nullable(),
  diasSemPedido: z.number().nullable(),
  totalPedidos: z.number(),
  ticketMedio: z.string(),
  faturamentoTotal: z.string(),
  participacaoPct: z.number(),
});
export type CarteiraCliente = z.infer<typeof CarteiraClienteSchema>;

export const ReportCarteiraResponseSchema = z.object({
  data: z.array(CarteiraClienteSchema),
  total: z.number(),
  inativos30: z.number(),
  inativos60: z.number(),
  semPedido: z.number(),
  faturamentoRepTotal: z.string(),
});
export type ReportCarteiraResponse = z.infer<typeof ReportCarteiraResponseSchema>;

// ─── Curva ABC de Produtos ───────────────────────────────────────────────────

export const ReportAbcQuerySchema = z.object({
  mes: z.coerce.number().int().min(1).max(12).optional(),
  ano: z.coerce.number().int().min(2000).max(2100).optional(),
});
export type ReportAbcQuery = z.infer<typeof ReportAbcQuerySchema>;

export const AbcProdutoSchema = z.object({
  codProduto: z.string().nullable(),
  descProduto: z.string(),
  totalFaturado: z.string(),
  qtdVendida: z.string(),
  participacao: z.string(),
  curva: z.enum(['A', 'B', 'C']),
  descontoMedio: z.string(),
  comissaoTotal: z.string(),
});
export type AbcProduto = z.infer<typeof AbcProdutoSchema>;

export const ReportAbcResponseSchema = z.object({
  data: z.array(AbcProdutoSchema),
  totalFaturado: z.string(),
  periodo: z.string(),
});
export type ReportAbcResponse = z.infer<typeof ReportAbcResponseSchema>;
