# app.py

import gradio as gr
import logging
from app.logging_config import configure_logging
from app.functions.database_handling import list_databases
from ui.chatbot_tab import create_chatbot_tab
from ui.db_management_tab import create_db_management_tab
from ui.document_management_tab import create_document_management_tab
from ui.new_features_tab import create_new_features_tab

# Configura il logging
configure_logging()

def main():
    """Funzione principale che crea e lancia l'app Gradio."""
    logging.info("Avvio applicazione")
    try:
        with gr.Blocks() as rag_chatbot:
            gr.Markdown("# Chatbot basato su RAG")
            logging.info("Interfaccia Gradio inizializzata")
            
            # Prima ottiene tutti i riferimenti
            doc_refs = create_document_management_tab()    
            chat_refs = create_chatbot_tab()
            
            # Crea dizionario completo dei riferimenti
            dropdowns = {
                "document": doc_refs,
                "chat": chat_refs
            }
            
            # Crea i tab nell'ordine corretto
            create_db_management_tab(dropdowns)          # Tab 1: DB Management
            doc_refs                                     # Tab 2: Document Management
            create_new_features_tab()                    # Tab 3: Features
            chat_refs                                    # Tab 4: Chatbot (ultima tab)
            
            rag_chatbot.launch()
            
    except Exception as e:
        logging.error(f"Errore durante l'avvio: {str(e)}")

if __name__ == "__main__":
    main()