import apiClient from '../apiClient';
import type { OtroDestinoDto } from '../../models/dtos/Distribucion/OtroDestinoDto';
import type { CreateOtroDestinoDto } from '../../models/dtos/Distribucion/CreateOtroDestinoDto';
import type { UpdateOtroDestinoDto } from '../../models/dtos/Distribucion/UpdateOtroDestinoDto';
import type { OtroDestinoDropdownDto } from '../../models/dtos/Distribucion/OtroDestinoDropdownDto';

const getAllOtrosDestinos = async (nombreFilter?: string): Promise<OtroDestinoDto[]> => {
    const params: Record<string, string> = {};
    if (nombreFilter) params.nombre = nombreFilter;

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

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

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

const createOtroDestino = async (data: CreateOtroDestinoDto): Promise<OtroDestinoDto> => {
    // Llama a POST /api/otrosdestinos
    const response = await apiClient.post<OtroDestinoDto>('/otrosdestinos', data);
    return response.data;
};

const updateOtroDestino = async (id: number, data: UpdateOtroDestinoDto): Promise<void> => {
    // Llama a PUT /api/otrosdestinos/{id}
    await apiClient.put(`/otrosdestinos/${id}`, data);
};

const deleteOtroDestino = async (id: number): Promise<void> => {
    // Llama a DELETE /api/otrosdestinos/{id}
    await apiClient.delete(`/otrosdestinos/${id}`);
};

const otroDestinoService = {
    getAllOtrosDestinos,
    getAllDropdownOtrosDestinos,
    getOtroDestinoById,
    createOtroDestino,
    updateOtroDestino,
    deleteOtroDestino,
};

export default otroDestinoService;