import apiClient from '../apiClient';
import type { TipoBobinaDto } from '../../models/dtos/Impresion/TipoBobinaDto';
import type { CreateTipoBobinaDto } from '../../models/dtos/Impresion/CreateTipoBobinaDto';
import type { UpdateTipoBobinaDto } from '../../models/dtos/Impresion/UpdateTipoBobinaDto';

const getAllTiposBobina = async (denominacionFilter?: string): Promise<TipoBobinaDto[]> => {
    const params: Record<string, string> = {};
    if (denominacionFilter) params.denominacion = denominacionFilter;

    // Llama a GET /api/tiposbobina
    const response = await apiClient.get<TipoBobinaDto[]>('/tiposbobina', { params });
    return response.data;
};

const getAllDropdownTiposBobina = async (): Promise<TipoBobinaDto[]> => {
    // Llama a GET /api/tiposbobina/dropdown
    const response = await apiClient.get<TipoBobinaDto[]>('/tiposbobina/dropdown');
    return response.data;
};

const getTipoBobinaById = async (id: number): Promise<TipoBobinaDto> => {
     // Llama a GET /api/tiposbobina/{id}
    const response = await apiClient.get<TipoBobinaDto>(`/tiposbobina/${id}`);
    return response.data;
};

const createTipoBobina = async (data: CreateTipoBobinaDto): Promise<TipoBobinaDto> => {
    // Llama a POST /api/tiposbobina
    const response = await apiClient.post<TipoBobinaDto>('/tiposbobina', data);
    return response.data; // La API devuelve el objeto creado (201 Created)
};

const updateTipoBobina = async (id: number, data: UpdateTipoBobinaDto): Promise<void> => {
    // Llama a PUT /api/tiposbobina/{id} (204 No Content en éxito)
    await apiClient.put(`/tiposbobina/${id}`, data);
};

const deleteTipoBobina = async (id: number): Promise<void> => {
    // Llama a DELETE /api/tiposbobina/{id} (204 No Content en éxito)
    await apiClient.delete(`/tiposbobina/${id}`);
};

const tipoBobinaService = {
    getAllTiposBobina,
    getAllDropdownTiposBobina,
    getTipoBobinaById,
    createTipoBobina,
    updateTipoBobina,
    deleteTipoBobina,
};

export default tipoBobinaService;