import { z } from 'zod';

// Contrato canônico do endpoint GET /api/v1/ping.
//
// Consumido por:
//   - apps/api: PingController retorna PingResponse (saída tipada).
//   - apps/web: TanStack Query parseia a resposta via PingResponseSchema.parse(...)
//     para validar o contrato em runtime — qualquer drift no servidor falha alto.
//
// CODING-RULES §06: o schema Zod É o contrato. DTO/classes (createZodDto) ficam
// na camada API quando precisar do pipe de validação; aqui carregamos só o que
// é compartilhável entre Node e Browser.

export const PingResponseSchema = z.object({
  status: z.literal('ok'),
  service: z.string().min(1),
  version: z.string().min(1),
  idEmpresa: z.number().int(),
  requestId: z.uuid(),
  uptimeSeconds: z.number().int().nonnegative(),
  now: z.iso.datetime(),
});

export type PingResponse = z.infer<typeof PingResponseSchema>;
