import { z } from 'zod/v4';

// Tipos para o método pixCreateImmediateCharge

const StatusPixReceivedSchema = z.enum([
  "ATIVA",
  "CONCLUIDA",
  "REMOVIDA_PELO_USUARIO_RECEBEDOR",
  "REMOVIDA_PELO_PSP"
]);

export type StatusPixReceived = z.infer<typeof StatusPixReceivedSchema>;

export const PixCalendarioSchema = z.object({
  expiracao: z.number(),
}).strict();

export type PixCalendario = z.infer<typeof PixCalendarioSchema>;

export const PixDevedorSchema = z
  .union([
    z
      .object({
        cpf: z.string().describe('CPF do devedor (somente números)'),
        nome: z.string().describe('Nome do devedor'),
      })
      .strict(),
    z
      .object({
        cnpj: z.string().describe('CNPJ do devedor (somente números)'),
        nome: z.string().describe('Nome do devedor'),
      })
      .strict(),
  ])
  .optional();
export type PixDevedor = z.infer<typeof PixDevedorSchema>;

export const PixCOBValorSchema = z.object({
  original: z.string(),
}).strict();

export type PixCOBValor = z.infer<typeof PixCOBValorSchema>;


export const PixInfoAdicionalSchema = z.object({
  nome: z.string(),
  valor: z.string(),
}).strict();

export type PixInfoAdicional = z.infer<typeof PixInfoAdicionalSchema>;

export const PixCreateImmediateChargeBodySchema = z.object({
  calendario: PixCalendarioSchema.extend({ criacao: z.string() }),
  devedor: PixDevedorSchema,
  valor: PixCOBValorSchema,
  chave: z.string(),
  solicitacaoPagador: z.string().optional(),
  loc: z.object({id: z.number()}).optional(),
  infoAdicionais: z.array(PixInfoAdicionalSchema).optional(),
}).strict();

export type PixCreateImmediateChargeBody = z.infer<typeof PixCreateImmediateChargeBodySchema>;

export const PixCreateImmediateChargeResponseSchema = z.object({
  calendario: z.object({
    criacao: z.string(),
    expiracao: z.number(),
  }),
  txid: z.string(),
  revisao: z.number(),
  loc: z.object({
    id: z.number(),
    location: z.string(),
    tipoCob: z.string(),
  }),
  location: z.string(),
  status: StatusPixReceivedSchema,
  devedor: PixDevedorSchema,
  valor: PixCOBValorSchema,
  chave: z.string(),
  solicitacaoPagador: z.string().optional(),
  pixCopiaECola: z.string(),
}).strict();

export type PixCreateImmediateChargeResponse = z.infer<typeof PixCreateImmediateChargeResponseSchema>; 