import { FastifyInstance, FastifyRequest, FastifyReply } from 'fastify';
import * as metadataService from '../services/metadataService';
import { z } from 'zod';
import { ZodError } from 'zod';

// Esquema de validación para parámetros de búsqueda
const searchMetadataSchema = z.object({
  q: z.string().min(1, 'El parámetro de búsqueda es requerido'),
  platform: z.string().optional(),
});

async function metadataRoutes(app: FastifyInstance) {
  /**
   * GET /api/metadata/search?q=query&platform=optional
   * Buscar metadata de juegos
   */
  app.get<{ Querystring: any; Reply: any[] }>('/metadata/search', async (request, reply) => {
    try {
      // Validar parámetros de query con Zod
      const validated = searchMetadataSchema.parse(request.query);

      // Llamar a metadataService
      const result = await metadataService.enrichGame({
        title: validated.q,
        platform: validated.platform,
      });

      // Si hay resultado, devolver como array; si no, devolver array vacío
      return reply.code(200).send(result ? [result] : []);
    } catch (error) {
      if (error instanceof ZodError) {
        return reply.code(400).send({
          error: 'Parámetros de búsqueda inválidos',
          details: error.errors,
        });
      }
      throw error;
    }
  });
}

export default metadataRoutes;

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