# Chatbot views - ChatGPT integration
import os
import json
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import csrf_exempt

# OpenAI API Configuration
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY', '')
OPENAI_API_ENDPOINT = 'https://api.openai.com/v1/chat/completions'


@csrf_exempt
@require_http_methods(["POST"])
def chatbot_api(request):
    """
    Chatbot API endpoint for ChatGPT integration

    Request format:
    {
        "message": "User message here"
    }

    Response format:
    {
        "success": true/false,
        "reply": "ChatGPT response",
        "error": "Error message (if any)"
    }
    """

    if not OPENAI_API_KEY:
        return JsonResponse({
            'success': False,
            'error': 'ChatGPT API key not configured. Please set OPENAI_API_KEY in environment variables.'
        }, status=400)

    try:
        data = json.loads(request.body)
        user_message = data.get('message', '').strip()

        if not user_message:
            return JsonResponse({
                'success': False,
                'error': 'Message cannot be empty'
            }, status=400)

        # Call OpenAI API
        import requests

        headers = {
            'Authorization': f'Bearer {OPENAI_API_KEY}',
            'Content-Type': 'application/json'
        }

        payload = {
            'model': 'gpt-3.5-turbo',  # or 'gpt-4' for better quality
            'messages': [
                {
                    'role': 'system',
                    'content': 'You are a helpful assistant for BMC Vietnam - a plant protection product company. Answer questions about our products and services in a friendly and professional manner.'
                },
                {
                    'role': 'user',
                    'content': user_message
                }
            ],
            'temperature': 0.7,
            'max_tokens': 500
        }

        response = requests.post(OPENAI_API_ENDPOINT, headers=headers, json=payload)

        if response.status_code != 200:
            return JsonResponse({
                'success': False,
                'error': f'ChatGPT API error: {response.status_code}'
            }, status=400)

        response_data = response.json()

        if 'choices' in response_data and len(response_data['choices']) > 0:
            assistant_message = response_data['choices'][0]['message']['content']
            return JsonResponse({
                'success': True,
                'reply': assistant_message
            })
        else:
            return JsonResponse({
                'success': False,
                'error': 'No response from ChatGPT'
            }, status=400)

    except json.JSONDecodeError:
        return JsonResponse({
            'success': False,
            'error': 'Invalid JSON format'
        }, status=400)
    except requests.RequestException as e:
        return JsonResponse({
            'success': False,
            'error': f'Network error: {str(e)}'
        }, status=500)
    except Exception as e:
        return JsonResponse({
            'success': False,
            'error': f'Server error: {str(e)}'
        }, status=500)
