const AWS = require('aws-sdk');
const axios = require('axios');
const mongoose = require('mongoose');
const FormData = require('form-data'); 
const Game = require('../../models/gameModel');
const aiEvaluateImageToStar = async (req, res) => {
  try {
    const { childId, gameName, gameID, gameTime, gameStar, screenShot } = req.body;
    if (!screenShot) {
      return res.status(400).json({ error: 'Screenshot is required' });
    }

    // Upload screenshot
    const formData = new FormData();
    formData.append('image', screenShot);
    
    const screenshotUploadResponse = await axios.post('https://teachertrainingchennai.in/api/uploadBase64/', formData, {
      headers: {
        ...formData.getHeaders(),
      },
    });

    const screenshotUrl = screenshotUploadResponse.data.filePath;
    // The coloring was done by a 5-year-old kid. Give a score between 1 to 10 in JSON format.
    const openAiPayload = {
      model: 'gpt-4o-mini',
      messages: [
        {
          role: 'user',
          content: [
            {
              type: 'text',
              text: 'The coloring was done by a 5-year-old kid. Give a score between 1 to 10 the Respond ONLY with a valid JSON object like {"score": 7}. No extra text, no formatting, just raw JSON.',
            },
            {
              type: 'image_url',
              image_url: {
                url: screenshotUrl,
              },
            },
          ],
        },
      ],
      max_tokens: 300,
    };

    const openAiResponse = await axios.post(
      'https://api.openai.com/v1/chat/completions',
      openAiPayload,
      {
        headers: {
          'Content-Type': 'application/json',
          Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
        },
      }
    );


    if (!openAiResponse.data.choices || openAiResponse.data.choices.length === 0) {
      throw new Error('Invalid OpenAI response format');
    }

    let scoreResponse = openAiResponse.data.choices[0].message.content.trim();

    if (scoreResponse.startsWith('```json')) {
      scoreResponse = scoreResponse.replace(/```json/, '').replace(/```/, '').trim();
    }


    const parsedScore = JSON.parse(scoreResponse);
    // console.log('Parsed Score:', parsedScore);

    const gameData = new Game({
      gameName,
      childId,
      gameID,
      gameTime,
      gameStar: parsedScore.score || 'N/A',
      screenshotUrl,
    });

    await gameData.save();

    return res.status(200).json({
      message: 'Game data saved successfully',
      data: gameData,
    });
  } catch (error) {
    console.error('Error:', error.message);
    return res.status(500).json({ error: error.message || 'Something went wrong' });
  }
};

module.exports = aiEvaluateImageToStar;
