from openai import OpenAI
from django.conf import settings
from sidebar.models import Identity, Skill
from projects.models import Project
from services.models import Service
from .prompts import get_system_prompt

def get_context_from_db():
    """Récupère les données brutes pour nourrir l'IA"""
    identity = Identity.objects.first()
    
    # Skills
    skills = list(Skill.objects.values_list('name', flat=True))
    
    # Projets (Format textuel simplifié)
    projects = Project.objects.all()[:5] # Les 5 plus récents
    projects_text = "\n".join([f"- {p.title}: {p.summary} (Tech: {[s.name for s in p.skills.all()]})" for p in projects])
    
    # Services
    services = Service.objects.all()
    services_text = "\n".join([f"- {s.title}: {s.short_description}" for s in services])
    
    return {
        'identity': identity,
        'skills': skills,
        'projects_text': projects_text,
        'services_text': services_text
    }

def chat_with_artemis(user_message, history=[]):
    """Interroge OpenRouter via le SDK OpenAI"""
    
    # 1. Configuration du Client
    client = OpenAI(
        base_url="https://openrouter.ai/api/v1",
        api_key=settings.OPENROUTER_API_KEY,
    )
    
    # 2. Préparation du contexte
    context_data = get_context_from_db()
    system_prompt = get_system_prompt(context_data)
    
    # 3. Construction de l'historique des messages
    messages = [{"role": "system", "content": system_prompt}]
    
    # On ajoute les derniers échanges pour la mémoire (limité à 6 pour économiser les tokens)
    for msg in history[-6:]:
        role = "user" if msg.get('sender') == 'user' else "assistant"
        messages.append({"role": role, "content": msg.get('text')})
        
    # Ajout du message actuel
    messages.append({"role": "user", "content": user_message})
    
    try:
        # 4. Appel API
        completion = client.chat.completions.create(
            extra_headers={
                "HTTP-Referer": settings.SITE_URL,
                "X-Title": settings.SITE_NAME,
            },
            model=settings.OPENROUTER_MODEL,
            messages=messages,
            temperature=0.7, # Créativité modérée
            max_tokens=300   # Réponses courtes
        )
        
        return completion.choices[0].message.content
        
    except Exception as e:
        print(f"Erreur OpenRouter: {e}")
        return "⚠️ Erreur de connexion au réseau neural. Veuillez réessayer plus tard."