/**
 * API Client para Countries
 * Gestiona las operaciones CRUD para los países
 */
import { api } from '$lib/api';

export interface Country {
    m3_key: string;
    mex_key: string;
    ame_key: string;
    description_es: string;
    description_en: string;
}

export interface CountryListResponse {
    items: Country[];
    total: number;
    page: number;
    page_size: number;
}

export interface CreateCountryData {
    m3_key: string;
    mex_key: string;
    ame_key: string;
    description_es: string;
    description_en: string;
}

export interface UpdateCountryData {
    m3_key?: string;
    mex_key?: string;
    ame_key?: string;
    description_es?: string;
    description_en?: string;
}

/**
 * API para Countries
 */
export const countriesApi = {
    /**
     * Lista todos los países con paginación
     * @param companyId - ID de la empresa
     * @param page - Número de página (por defecto 1)
     * @param pageSize - Tamaño de página (por defecto 50)
     * @param search - Término de búsqueda (opcional)
     */
    list: (companyId: number, page = 1, pageSize = 50, search?: string) => {
        let url = `/v1/public/reference_data/countries/?company_id=${companyId}&page=${page}&page_size=${pageSize}`;
        if (search) {
            url += `&search=${encodeURIComponent(search)}`;
        }
        return api.get<CountryListResponse>(url);
    },

    /**
     * Obtiene un país por su clave M3
     * @param m3_key - Clave M3 del país
     */
    get: (m3_key: string) =>
        api.get<Country>(`/v1/public/reference_data/countries/${m3_key}/`),

    /**
     * Crea un nuevo país
     * @param data - Datos del país a crear
     */
    create: (data: CreateCountryData) =>
        api.post<Country>('/v1/public/reference_data/countries/', data),

    /**
     * Actualiza un país existente
     * @param m3_key - Clave M3 del país a actualizar
     * @param data - Datos a actualizar
     */
    update: (m3_key: string, data: UpdateCountryData) =>
        api.put<Country>(`/v1/public/reference_data/countries/${m3_key}/`, data),

    /**
     * Elimina un país
     * @param m3_key - Clave M3 del país a eliminar
     */
    delete: (m3_key: string) =>
        api.delete(`/v1/public/reference_data/countries/${m3_key}/`)
};