from flask import Blueprint, render_template, request, jsonify, current_app, Response, stream_with_context
from ..services.chat import ChatService
import logging
import requests
import json
from ..config import Config

logger = logging.getLogger(__name__)
playground_bp = Blueprint('playground', __name__)
chat_service = ChatService()

@playground_bp.route('/playground')
def playground():
    return render_template('home.html')

@playground_bp.route('/api/playground/generate', methods=['POST'])
def generate():
    try:
        logger.info("Received request to /api/playground/generate")
        data = request.get_json()
        if not data:
            logger.error("No data provided in request")
            return jsonify({"error": "No data provided"}), 400

        message = data.get('message')
        model = data.get('model', 'llama3:latest')
        system_prompt = data.get('system_prompt', 'You are a helpful AI assistant.')
        temperature = data.get('temperature', 0.7)
        max_tokens = data.get('max_tokens', 2000)
        top_p = data.get('top_p', 0.9)

        if not message:
            logger.error("No message provided in request")
            return jsonify({"error": "No message provided"}), 400

        logger.info(f"Generating response for model: {model}")
        logger.debug(f"Message: {message}")
        logger.debug(f"System prompt: {system_prompt}")
        logger.debug(f"Temperature: {temperature}")
        logger.debug(f"Max tokens: {max_tokens}")
        logger.debug(f"Top P: {top_p}")

        try:
            result = chat_service.send_message(
                message=message,
                model=model,
                system_prompt=system_prompt,
                stream=False  
            )
            
            if not result or 'response' not in result:
                logger.error("Invalid response from chat service")
                return jsonify({"error": "Invalid response from AI service"}), 500

            return jsonify({"response": result['response']})

        except Exception as e:
            logger.error(f"Error from chat service: {str(e)}")
            return jsonify({"error": str(e)}), 500

    except Exception as e:
        logger.error(f"Error generating response: {str(e)}")
        return jsonify({"error": str(e)}), 500

@playground_bp.route('/api/playground/upload', methods=['POST'])
def upload_file():
    try:
        if 'file' not in request.files:
            return jsonify({"error": "No file provided"}), 400

        file = request.files['file']
        if file.filename == '':
            return jsonify({"error": "No file selected"}), 400

        if not file:
            return jsonify({"error": "Invalid file"}), 400

        content = file.read().decode('utf-8')
        
        return jsonify({
            "message": "File uploaded successfully",
            "content": content
        })

    except Exception as e:
        logger.error(f"Error uploading file: {str(e)}")
        return jsonify({"error": str(e)}), 500 