const fp = require('fastify-plugin');
const { OpenAI } = require('openai');
const fs = require('fs');
const util = require('util');
const { pipeline } = require('stream');
const pump = util.promisify(pipeline);

module.exports = fp(async function (fastify, opts) {
  const openai = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
  });

  fastify.decorate('openai', openai);

  // Transcription audio avec Whisper
  fastify.decorate('transcribeAudio', async (audioPath) => {
    const transcription = await openai.audio.transcriptions.create({
      file: fs.createReadStream(audioPath),
      model: 'whisper-1',
    });
    return transcription.text;
  });

  // Génération de recette avec 01-mini
  fastify.decorate('generateRecipe', async (ingredients, prompt) => {
    const completion = await openai.chat.completions.create({
      model: "gpt-3.5-turbo", // Remplacer par 01-mini quand disponible
      messages: [
        {
          role: "system",
          content: "Tu es un chef cuisinier expert qui crée des recettes délicieuses et faciles à réaliser."
        },
        {
          role: "user",
          content: `Voici les ingrédients disponibles: ${ingredients}. ${prompt || 'Propose une recette avec ces ingrédients.'}`
        }
      ],
    });

    return completion.choices[0].message.content;
  });

  // Gestion du téléchargement de fichiers audio
  fastify.decorate('saveAudioFile', async (file) => {
    const uploadDir = './uploads';
    if (!fs.existsSync(uploadDir)) {
      fs.mkdirSync(uploadDir);
    }

    const filename = `${Date.now()}-${file.filename}`;
    const filepath = `${uploadDir}/${filename}`;

    await pump(file.file, fs.createWriteStream(filepath));
    return filepath;
  });
});