/**
 * API Client para States
 * Gestiona las operaciones CRUD para los estados
 */
import { api } from '$lib/api';

export interface State {
    m3_key: string;
    description: string;
    mex_key?: string | null;
    ame_key?: string | null;
}

export interface StateListResponse {
    items: State[];
    total: number;
    page: number;
    page_size: number;
}

export interface CreateStateData {
    m3_key: string;
    description: string;
    mex_key?: string | null;
    ame_key?: string | null;
}

export interface UpdateStateData {
    m3_key?: string;
    description?: string;
    mex_key?: string | null;
    ame_key?: string | null;
}

/**
 * API para States
 */
export const statesApi = {
    /**
     * Lista todos los estados con paginación y búsqueda
     * 🛡️ CORREGIDO: Ahora requiere companyId
     */
    list: (companyId: number, page = 1, pageSize = 50, search?: string) => {
        let url = `/v1/public/reference_data/states/?company_id=${companyId}&page=${page}&page_size=${pageSize}`;
        if (search) {
            url += `&search=${encodeURIComponent(search)}`;
        }
        return api.get<StateListResponse>(url);
    },

    /**
     * Obtiene un estado por m3_key
     * 🛡️ CORREGIDO: Ahora requiere companyId
     */
    get: (companyId: number, m3Key: string) =>
        api.get<State>(`/v1/public/reference_data/states/${m3Key}/?company_id=${companyId}`),

    /**
     * Crea un nuevo estado
     * 🛡️ CORREGIDO: Ahora requiere companyId
     */
    create: (companyId: number, data: CreateStateData) =>
        api.post<State>(`/v1/public/reference_data/states/?company_id=${companyId}`, data),

    /**
     * Actualiza un estado existente
     * 🛡️ CORREGIDO: Ahora requiere companyId
     */
    update: (companyId: number, m3Key: string, data: UpdateStateData) =>
        api.put<State>(`/v1/public/reference_data/states/${m3Key}/?company_id=${companyId}`, data),

    /**
     * Elimina un estado
     * 🛡️ CORREGIDO: Ahora requiere companyId
     */
    delete: (companyId: number, m3Key: string) =>
        api.delete(`/v1/public/reference_data/states/${m3Key}/?company_id=${companyId}`)
};