import apiClient from '../apiClient';
import type { TipoPago } from '../../models/Entities/TipoPago';
import type { CreateTipoPagoDto } from '../../models/dtos/Contables/CreateTipoPagoDto';
import type { UpdateTipoPagoDto } from '../../models/dtos/Contables/UpdateTipoPagoDto';

const getAllTiposPago = async (nombreFilter?: string): Promise<TipoPago[]> => {
    const params: Record<string, string> = {};
    if (nombreFilter) {
        params.nombre = nombreFilter;
    }
    const response = await apiClient.get<TipoPago[]>('/tipospago', { params });
    return response.data;
};

const getTipoPagoById = async (id: number): Promise<TipoPago> => {
    const response = await apiClient.get<TipoPago>(`/tipospago/${id}`);
    return response.data;
};

const createTipoPago = async (data: CreateTipoPagoDto): Promise<TipoPago> => {
    const response = await apiClient.post<TipoPago>('/tipospago', data);
    return response.data; // La API devuelve el objeto creado (201 Created)
};

const updateTipoPago = async (id: number, data: UpdateTipoPagoDto): Promise<void> => {
    // PUT no suele devolver contenido en éxito (204 No Content)
    await apiClient.put(`/tipospago/${id}`, data);
};

const deleteTipoPago = async (id: number): Promise<void> => {
    // DELETE no suele devolver contenido en éxito (204 No Content)
    await apiClient.delete(`/tipospago/${id}`);
};

const tipoPagoService = {
    getAllTiposPago,
    getTipoPagoById,
    createTipoPago,
    updateTipoPago,
    deleteTipoPago,
};

export default tipoPagoService;