import { apiGet, apiPost, apiPut, apiDelete, apiGetPaginated, apiSearch } from './client';
import type { Game, GameFilters, GameFormData, PaginatedResponse } from '@/types';

// Obtener todos los juegos con paginación
export const getGames = async (page: number = 1, limit: number = 10, filters?: GameFilters) => {
  return apiGetPaginated<Game>('/api/games', page, limit, filters);
};

// Obtener un juego por ID
export const getGameById = async (id: number) => {
  return apiGet<Game>(`/api/games/${id}`);
};

// Crear un nuevo juego
export const createGame = async (data: GameFormData) => {
  return apiPost<Game>('/api/games', data);
};

// Actualizar un juego existente
export const updateGame = async (id: number, data: GameFormData) => {
  return apiPut<Game>(`/api/games/${id}`, data);
};

// Eliminar un juego
export const deleteGame = async (id: number) => {
  return apiDelete(`/api/games/${id}`);
};

// Buscar juegos
export const searchGames = async (query: string, filters?: GameFilters) => {
  return apiSearch<Game>('/api/games', query, filters);
};

// Obtener juegos por plataforma
export const getGamesByPlatform = async (
  platformId: number,
  page: number = 1,
  limit: number = 10
) => {
  return apiGetPaginated<Game>(`/api/games/platform/${platformId}`, page, limit);
};

// Obtener juegos por etiqueta
export const getGamesByTag = async (tagId: number, page: number = 1, limit: number = 10) => {
  return apiGetPaginated<Game>(`/api/games/tag/${tagId}`, page, limit);
};

// Obtener juegos sin ROM
export const getGamesWithoutRom = async (page: number = 1, limit: number = 10) => {
  return apiGetPaginated<Game>('/api/games/without-rom', page, limit);
};

// Obtener juegos metadata pendiente
export const getGamesWithPendingMetadata = async (page: number = 1, limit: number = 10) => {
  return apiGetPaginated<Game>('/api/games/pending-metadata', page, limit);
};

// Actualizar metadata de un juego
export const updateGameMetadata = async (id: number, metadata: any) => {
  return apiPut<Game>(`/api/games/${id}/metadata`, metadata);
};

// Enriquecer metadata de un juego
export const enrichGameMetadata = async (id: number, source: 'igdb' | 'rawg' | 'thegamesdb') => {
  return apiPost<Game>(`/api/games/${id}/enrich`, { source });
};

// Obtener estadísticas de juegos
export const getGameStats = async () => {
  return apiGet<{
    totalGames: number;
    gamesWithRom: number;
    gamesWithoutRom: number;
    gamesWithMetadata: number;
    gamesWithoutMetadata: number;
    totalPlatforms: number;
    totalTags: number;
    averageRating: number;
  }>('/api/games/stats');
};
