# modules/chatbot/chat_process.py
import os
import anthropic
import logging
from typing import Generator

logger = logging.getLogger(__name__)

class ChatProcessor:
    def __init__(self):
        """Inicializa el procesador de chat con la API de Claude"""
        self.client = anthropic.Anthropic(
            api_key=os.environ.get("ANTHROPIC_API_KEY")
        )
        self.conversation_history = []
        self.semantic_context = None

    def set_semantic_context(self, text, metrics, graph_data):
        """Configura el contexto semántico para el chat"""
        self.semantic_context = {
            'text_sample': text[:2000],  # Tomamos solo un fragmento
            'key_concepts': metrics.get('key_concepts', []),
            'graph_data': graph_data is not None
        }
        # Reiniciamos el historial para el nuevo contexto
        self.conversation_history = []

    def clear_semantic_context(self):
        """Limpia el contexto semántico"""
        self.semantic_context = None
        self.conversation_history = []

    def process_chat_input(self, message: str, lang_code: str) -> Generator[str, None, None]:
        """Procesa el mensaje del usuario y genera la respuesta"""
        try:
            # Construir el prompt del sistema según el contexto
            if self.semantic_context:
                system_prompt = f"""
                Eres un asistente especializado en análisis semántico de textos. 
                El usuario ha analizado un texto con los siguientes conceptos clave: 
                {', '.join([c[0] for c in self.semantic_context['key_concepts'][:5]])}
                
                Responde preguntas específicas sobre este análisis, incluyendo:
                - Interpretación de conceptos clave
                - Relaciones entre conceptos
                - Sugerencias para mejorar el texto
                - Explicaciones sobre el gráfico semántico
                """
            else:
                system_prompt = "Eres un asistente útil. Responde preguntas generales."

            # Agregar mensaje al historial
            self.conversation_history.append({
                "role": "user", 
                "content": message
            })

            # Llamar a la API de Claude
            with anthropic.Anthropic().messages.stream(
                model="claude-3-sonnet-20240229",
                max_tokens=4000,
                temperature=0.7,
                system=system_prompt,
                messages=self.conversation_history
            ) as stream:
                for text in stream.text_stream:
                    yield text

            # Actualizar historial (la API lo hace automáticamente)
            
        except Exception as e:
            logger.error(f"Error en process_chat_input: {str(e)}")
            yield "Lo siento, ocurrió un error al procesar tu mensaje. Por favor, inténtalo de nuevo."