/**
 * Schémas de validation pour les employés
 */
import { z } from 'zod';

// Schéma pour valider un ticket
export const validateTicketSchema = z.object({
  body: z.object({
    ticketId: z.string({
      required_error: 'L\'ID du ticket est requis',
    }).uuid('Format d\'ID invalide'),
    action: z.enum(['APPROVE', 'REJECT'], {
      required_error: 'L\'action est requise (APPROVE ou REJECT)',
    }),
    rejectionReason: z.string().optional(),
  }).refine(
    (data) => {
      // Si action est REJECT, rejectionReason est obligatoire
      if (data.action === 'REJECT' && !data.rejectionReason) {
        return false;
      }
      return true;
    },
    {
      message: 'La raison du rejet est requise pour rejeter un ticket',
      path: ['rejectionReason'],
    }
  ),
});

// Schéma pour rechercher un ticket par code
export const searchTicketSchema = z.object({
  query: z.object({
    code: z
      .string({
        required_error: 'Le code du ticket est requis',
      })
      .length(10, 'Le code du ticket doit contenir exactement 10 caractères')
      .regex(/^TT[A-Z0-9]{8}$/, 'Format invalide. Le code doit être au format TT + 8 caractères alphanumériques'),
  }),
});

// Schéma pour récupérer les tickets en attente
export const getPendingTicketsSchema = z.object({
  query: z.object({
    page: z.string().optional().default('1'),
    limit: z.string().optional().default('20'),
  }),
});

export default {
  validateTicketSchema,
  searchTicketSchema,
  getPendingTicketsSchema,
};
