# modules/chatbot/sidebar_chat.py
import streamlit as st
from .chat_process import ChatProcessor
from ..database.chat_mongo_db import store_chat_history, get_chat_history
import logging

logger = logging.getLogger(__name__)

def display_sidebar_chat(lang_code: str, chatbot_t: dict):
    """
    Muestra el chatbot en el sidebar
    Args:
        lang_code: Código del idioma
        chatbot_t: Diccionario de traducciones del chatbot
    """
    # Asegurar que tenemos las traducciones necesarias
    default_translations = {
        'error_message': 'An error occurred',
        'expand_chat': 'Open Assistant',
        'initial_message': 'Hi! How can I help?',
        'input_placeholder': 'Type your message...',
        'clear_chat': 'Clear chat'
    }
    
    # Combinar traducciones por defecto con las proporcionadas
    translations = {**default_translations, **chatbot_t}

    with st.sidebar:
        # Chatbot expandible
        with st.expander(translations['expand_chat'], expanded=False):
            try:
                # Inicializar procesador si no existe
                if 'chat_processor' not in st.session_state:
                    try:
                        st.session_state.chat_processor = ChatProcessor()
                    except Exception as e:
                        logger.error(f"Error inicializando ChatProcessor: {str(e)}")
                        st.error("Error: No se pudo inicializar el chat. Verifica la configuración.")
                        return
                
                # Inicializar mensajes si no existen
                if 'sidebar_messages' not in st.session_state:
                    # Intentar recuperar historial previo
                    try:
                        history = get_chat_history(st.session_state.username, 'sidebar', 10)
                        if history:
                            st.session_state.sidebar_messages = history[0]['messages']
                        else:
                            st.session_state.sidebar_messages = [
                                {"role": "assistant", "content": translations['initial_message']}
                            ]
                    except Exception as e:
                        logger.error(f"Error recuperando historial: {str(e)}")
                        st.session_state.sidebar_messages = [
                            {"role": "assistant", "content": translations['initial_message']}
                        ]

                # Contenedor del chat
                chat_container = st.container()

                # Mostrar mensajes existentes
                with chat_container:
                    for message in st.session_state.sidebar_messages:
                        with st.chat_message(message["role"]):
                            st.markdown(message["content"])

                # Input del usuario
                user_input = st.text_input(
                    translations['input_placeholder'],
                    key='sidebar_chat_input'
                )

                if user_input:
                    # Agregar mensaje del usuario
                    st.session_state.sidebar_messages.append(
                        {"role": "user", "content": user_input}
                    )
                
                    # Generar y mostrar respuesta
                    with chat_container:
                        with st.chat_message("assistant"):
                            message_placeholder = st.empty()
                            full_response = ""
                            
                            for chunk in st.session_state.chat_processor.process_chat_input(
                                user_input,
                                lang_code
                            ):
                                full_response += chunk
                                message_placeholder.markdown(full_response)
                            
                            # Guardar respuesta
                            st.session_state.sidebar_messages.append(
                                {"role": "assistant", "content": full_response.strip()}
                            )
                                    
                    # En la función donde guardamos el chat
                    store_chat_history(
                        username=st.session_state.username,
                        messages=st.session_state.sidebar_messages,
                        analysis_type='sidebar'  # Especificar el tipo
                    )

                # Botón para limpiar chat
                if st.button(translations['clear_chat']):
                    st.session_state.sidebar_messages = [
                        {"role": "assistant", "content": translations['initial_message']}
                    ]
                    st.rerun()

            except Exception as e:
                logger.error(f"Error en sidebar chat: {str(e)}")
                st.error(translations['error_message'])