import { z } from 'zod';

// Enum para condiciones (Loose, CIB, New)
export const GameCondition = z.enum(['Loose', 'CIB', 'New']).optional();

// Esquema de validación para crear un juego
export const createGameSchema = z.object({
  title: z.string().min(1, 'El título es requerido').trim(),
  platformId: z.string().optional(),
  description: z.string().optional().nullable(),
  priceCents: z.number().int().positive().optional(),
  currency: z.string().optional().default('USD'),
  store: z.string().optional(),
  date: z.string().optional(), // Acepta formato ISO (YYYY-MM-DD o ISO completo)
  condition: GameCondition,
});

// Esquema de validación para actualizar un juego (todos los campos son opcionales)
export const updateGameSchema = z
  .object({
    title: z.string().min(1).trim().optional(),
    platformId: z.string().optional(),
    description: z.string().optional().nullable(),
    priceCents: z.number().int().positive().optional(),
    currency: z.string().optional(),
    store: z.string().optional(),
    date: z.string().optional(), // Acepta formato ISO (YYYY-MM-DD o ISO completo)
    condition: GameCondition,
  })
  .strict();

// Tipos TypeScript derivados de los esquemas
export type CreateGameInput = z.infer<typeof createGameSchema>;
export type UpdateGameInput = z.infer<typeof updateGameSchema>;

/**
 * Metadatos:
 * Autor: GitHub Copilot
 * Última actualización: 2026-02-11
 */
