import apiClient from '../apiClient';
import type { CancionDto } from '../../models/dtos/Radios/CancionDto';
import type { CreateCancionDto } from '../../models/dtos/Radios/CreateCancionDto';
import type { UpdateCancionDto } from '../../models/dtos/Radios/UpdateCancionDto';

interface GetAllCancionesParams {
    temaFilter?: string | null;
    interpreteFilter?: string | null;
    idRitmoFilter?: number | null;
}

const getAllCanciones = async (filters: GetAllCancionesParams): Promise<CancionDto[]> => {
    const params: Record<string, string | number> = {};
    if (filters.temaFilter) params.tema = filters.temaFilter; // Backend espera 'tema'
    if (filters.interpreteFilter) params.interprete = filters.interpreteFilter; // Backend espera 'interprete'
    if (filters.idRitmoFilter) params.idRitmo = filters.idRitmoFilter; // Backend espera 'idRitmo'

    const response = await apiClient.get<CancionDto[]>('/canciones', { params });
    return response.data;
};

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

const createCancion = async (data: CreateCancionDto): Promise<CancionDto> => {
    const response = await apiClient.post<CancionDto>('/canciones', data);
    return response.data;
};

const updateCancion = async (id: number, data: UpdateCancionDto): Promise<void> => {
    await apiClient.put(`/canciones/${id}`, data);
};

const deleteCancion = async (id: number): Promise<void> => {
    await apiClient.delete(`/canciones/${id}`);
};

const cancionService = {
    getAllCanciones,
    getCancionById,
    createCancion,
    updateCancion,
    deleteCancion,
};

export default cancionService;