const aiFollowupQuestion = async (req, res) => {

  const { MongoClient } = require('mongodb');
  // const fetch = require('node-fetch');
  const { v4: uuidv4 } = require('uuid');
  const url = process.env.MONGODB_URL;
  const dbName = process.env.MONGO_DB_NAME;
  const client = new MongoClient(url);
  
  await client.connect();
  const database = client.db(dbName);
  const conversationsCollection = database.collection('conversations');
  
  async function fetchOpenAICompletion(prompt, messages, model = "gpt-3.5-turbo-16k", max_tokens = 200) {
    const response = await fetch('https://api.openai.com/v1/chat/completions', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${process.env.OPENAI_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        model: model,
        messages: messages,
        // messages: [
        //     { role: "system", content: "reply must not exceed 20 words" },
        //     { role: "user", content: messages }
        // ],
        max_tokens: max_tokens,
      }),
    });
  
    const data = await response.json();
    // console.log(process.env.OPENAI_KEY)
    // console.log(data)
    return data;
  }
  
  
    try {
      const { prompt, sessionId, model = "gpt-3.5-turbo-16k", max_tokens = 200 } = req.body;
      if (!conversationsCollection) {
        return res.status(500).json({
          success: false,
          error: 'MongoDB is not connected yet. Please try again later.',
        });
      }
      let conversation;
  
      if (!sessionId) {
        const newSessionId = uuidv4();
  
        conversation = {
          sessionId: newSessionId,
          conversationHistory: [
            { role: 'system', content: 'Reply to the questions asked by a kindergarten child, Sound excited to answer and encourage the child to ask more questions in 30 words' },
            { role: 'user', content: prompt },
          ],
        };
        await conversationsCollection.insertOne(conversation);
      } else {
        conversation = await conversationsCollection.findOne({ sessionId: sessionId });
        if (!conversation) {
          return res.status(400).json({
            success: false,
            error: 'Invalid session ID.',
          });
        }
        conversation.conversationHistory.push({ role: 'user', content: prompt });
      }
  
      const aiResponse = await fetchOpenAICompletion(prompt, conversation.conversationHistory, model, max_tokens);
  
      conversation.conversationHistory.push({ role: 'assistant', content: aiResponse.choices[0].message.content });
  
      await conversationsCollection.updateOne(
        { sessionId: conversation.sessionId },
        { $set: { conversationHistory: conversation.conversationHistory } }
      );
  
      res.json({
        success: true,
        data: aiResponse.choices[0].message.content,
        total_tokens: aiResponse.usage.total_tokens,
        sessionId: conversation.sessionId,
      });
    } catch (error) {
      console.error('Error generating response:', error.message);
      res.status(500).json({
        success: false,
        error: 'Something went wrong. Please try again later.',
      });
    }
  
  
  }
  
  module.exports = aiFollowupQuestion;