import apiClient from '../apiClient';
import type { EmpresaDto } from '../../models/dtos/Distribucion/EmpresaDto';
import type { CreateEmpresaDto } from '../../models/dtos/Distribucion/CreateEmpresaDto';
import type { UpdateEmpresaDto } from '../../models/dtos/Distribucion/UpdateEmpresaDto';
import type { EmpresaDropdownDto } from '../../models/dtos/Distribucion/EmpresaDropdownDto';
import type { EmpresaLookupDto } from '../../models/dtos/Distribucion/EmpresaLookupDto';

const getAllEmpresas = async (nombreFilter?: string, detalleFilter?: string): Promise<EmpresaDto[]> => {
    const params: Record<string, string> = {};
    if (nombreFilter) params.nombre = nombreFilter;
    if (detalleFilter) params.detalle = detalleFilter; // Asegúrate que la API soporte esto

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

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

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

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

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

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

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

const empresaService = {
    getAllEmpresas,
    getEmpresaById,
    createEmpresa,
    updateEmpresa,
    deleteEmpresa,
    getEmpresasDropdown,
    getEmpresaLookupById,
};

export default empresaService;