import { apiClient } from './client';
import { ApiResponse, Category, CreateCategoryInput, UpdateCategoryInput, CategoryOperationResult } from '@/types';

/**
 * Funciones de API para categorías
 */

/**
 * Obtener lista de categorías
 */
export async function getCategories(): Promise<Category[]> {
  const response = await apiClient.get<{ categories: Category[] }>('/api/categories');
  return response.data?.categories || [];
}

/**
 * Crear una nueva categoría
 */
export async function createCategory(data: CreateCategoryInput): Promise<{ categoryId: string }> {
  const response = await apiClient.post<CategoryOperationResult>('/api/categories', data);
  
  if (!response.data?.success || !response.data.categoryId) {
    throw new Error(response.data?.error || 'Failed to create category');
  }
  
  return { categoryId: response.data.categoryId };
}

/**
 * Actualizar una categoría
 */
export async function updateCategory(id: string, data: UpdateCategoryInput): Promise<void> {
  const response = await apiClient.put<CategoryOperationResult>(`/api/categories/${id}`, data);
  
  if (!response.data?.success) {
    throw new Error(response.data?.error || 'Failed to update category');
  }
}

/**
 * Eliminar una categoría
 */
export async function deleteCategory(id: string): Promise<void> {
  const response = await apiClient.delete<CategoryOperationResult>(`/api/categories/${id}`);
  
  if (!response.data?.success) {
    throw new Error(response.data?.error || 'Failed to delete category');
  }
}
