import { base } from './base';
import axios from 'axios';

export interface Recipe {
  id: string;
  title: string;
  ingredients: string;
  generatedRecipe: string;
  createdAt: string;
  audioUrl?: string;
}

export interface RecipeResponse {
  recipe: Recipe;
}

export interface RecipesResponse {
  recipes: Recipe[];
}

// Créer une nouvelle recette à partir d'un fichier audio
export const createRecipe = async (audioFile: File): Promise<Recipe> => {
  try {
    const formData = new FormData();
    formData.append('file', audioFile);

    const response = await base.post<RecipeResponse>('/recipes/create', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });

    return response.data.recipe;
  } catch (error) {
    if (axios.isAxiosError(error) && error.response) {
      throw new Error(error.response.data.error || 'Erreur lors de la création de la recette');
    }
    throw new Error('Erreur réseau lors de la création de la recette');
  }
};

// Récupérer la liste des recettes de l'utilisateur
export const getRecipes = async (): Promise<Recipe[]> => {
  try {
    const response = await base.get<RecipesResponse>('/recipes/list');
    return response.data.recipes;
  } catch (error) {
    if (axios.isAxiosError(error) && error.response) {
      throw new Error(error.response.data.error || 'Erreur lors de la récupération des recettes');
    }
    throw new Error('Erreur réseau lors de la récupération des recettes');
  }
};

// Récupérer les détails d'une recette spécifique
export const getRecipeById = async (id: string): Promise<Recipe> => {
  try {
    const response = await base.get<RecipeResponse>(`/recipes/${id}`);
    return response.data.recipe;
  } catch (error) {
    if (axios.isAxiosError(error) && error.response) {
      throw new Error(error.response.data.error || 'Erreur lors de la récupération de la recette');
    }
    throw new Error('Erreur réseau lors de la récupération de la recette');
  }
};

// Supprimer une recette
export const deleteRecipe = async (id: string): Promise<boolean> => {
  try {
    await base.delete(`/recipes/${id}`);
    return true;
  } catch (error) {
    if (axios.isAxiosError(error) && error.response) {
      throw new Error(error.response.data.error || 'Erreur lors de la suppression de la recette');
    }
    throw new Error('Erreur réseau lors de la suppression de la recette');
  }
};

export const recipeService = {
  createRecipe,
  getRecipes,
  getRecipeById,
  deleteRecipe,
};