# modules/__init__.py

def load_auth_functions():
    from .auth.auth import authenticate_student, register_student, update_student_info, delete_student
    return {
        'authenticate_student': authenticate_student,
        'register_student': register_student,
        'update_student_info': update_student_info,
        'delete_student': delete_student
    }

def load_database_functions():

    from .database.database_init import (
    initialize_database_connections
    )

    from .database.sql_db import (
        create_student_user,
        get_student_user,
        update_student_user,
        delete_student_user,
        store_application_request,
        store_student_feedback
    )
    
    from .database.mongo_db import (
        get_collection,
        insert_document,
        find_documents,
        update_document,
        delete_document,
    )
    
    from .database.morphosintax_mongo_db import (
        store_student_morphosyntax_result,
        get_student_morphosyntax_analysis,
        update_student_morphosyntax_analysis,
        delete_student_morphosyntax_analysis,
        get_student_morphosyntax_data
    )

    from .database.semantic_mongo_db import (
        store_student_semantic_result,
        get_student_semantic_analysis,
        update_student_semantic_analysis,
        delete_student_semantic_analysis,
        get_student_semantic_data
    )

    from .database.discourse_mongo_db import (
        store_student_discourse_result,
        get_student_discourse_analysis,
        update_student_discourse_analysis,
        delete_student_discourse_analysis,
        get_student_discourse_data
    )

    from .database.chat_db import store_chat_history, get_chat_history

    return {
        'initialize_database_connections': initialize_database_connections,
        'create_student_user': create_student_user,
        'get_student_user': get_student_user,
        'update_student_user': update_student_user,
        'delete_student_user': delete_student_user,
        'store_application_request': store_application_request,
        'store_student_feedback': store_student_feedback,
        'get_collection': get_collection,
        'insert_document': insert_document,
        'find_documents': find_documents,
        'update_document': update_document,
        'delete_document': delete_document,
        'store_student_morphosyntax_result': store_student_morphosyntax_result,
        'get_student_morphosyntax_analysis': get_student_morphosyntax_analysis,
        'update_student_morphosyntax_analysis': update_student_morphosyntax_analysis,
        'delete_student_morphosyntax_analysis': delete_student_morphosyntax_analysis,
        'get_student_morphosyntax_data': get_student_morphosyntax_data,
        'store_student_semantic_result': store_student_semantic_result,
        'get_student_semantic_analysis': get_student_semantic_analysis,
        'update_student_semantic_analysis': update_student_semantic_analysis,
        'delete_student_semantic_analysis': delete_student_semantic_analysis,
        'get_student_semantic_data': get_student_semantic_data,
        'store_chat_history': store_chat_history,
        'get_chat_history': get_chat_history, 
        'store_student_discourse_result': store_student_discourse_result,
        'get_student_discourse_analysis': get_student_discourse_analysis,
        'update_student_discourse_analysis': update_student_discourse_analysis,
        'delete_student_discourse_analysis': delete_student_discourse_analysis,
        'get_student_discourse_data': get_student_discourse_data
    }

def load_ui_functions():
    # No importamos nada de ui.py aquí
    return {}  # Retornamos un diccionario vacío

def load_student_activities_functions():
    from .studentact.student_activities import display_student_progress
    return {
        'display_student_progress': display_student_progress
    }

def load_morphosyntax_functions():
    from .morphosyntax.morphosyntax_interface import (
        display_morphosyntax_interface,
        display_morphosyntax_results
    )
    from .morphosyntax.morphosyntax_process import (
        process_morphosyntactic_input,
        format_analysis_results,
        perform_advanced_morphosyntactic_analysis  # Añadir esta función
    )
    
    return {
        'display_morphosyntax_interface': display_morphosyntax_interface,
        'display_morphosyntax_results': display_morphosyntax_results,
        'process_morphosyntactic_input': process_morphosyntactic_input,
        'format_analysis_results': format_analysis_results,
        'perform_advanced_morphosyntactic_analysis': perform_advanced_morphosyntactic_analysis
    }

def load_semantic_functions():
    from modules.semantic.semantic_interface import (
        display_semantic_interface, 
        display_semantic_results
    )
    from modules.semantic.semantic_process import (
        process_semantic_input, 
        format_semantic_results
    )

    return {
        'display_semantic_interface': display_semantic_interface,
        'display_semantic_results': display_semantic_results,
        'process_semantic_input': process_semantic_input,
        'format_semantic_results': format_analysis_results,
    }


def load_discourse_functions():
    from modules.discourse.discourse_interface import (
        display_discourse_interface, 
        display_discourse_results
    )
    from modules.discourse.discourse_process import (
        perform_discourse_analysis,      # Este es el nombre correcto de la función
        extract_key_concepts,            # Función adicional que necesitamos
        generate_concept_graph,          # Función adicional que necesitamos
        calculate_similarity_matrix      # Función adicional que necesitamos
    )
    
    return {
        'display_discourse_interface': display_discourse_interface,
        'display_discourse_results': display_discourse_results,
        'perform_discourse_analysis': perform_discourse_analysis,
        'extract_key_concepts': extract_key_concepts,
        'generate_concept_graph': generate_concept_graph,
        'calculate_similarity_matrix': calculate_similarity_matrix
    }

def load_admin_functions():
    from .admin.admin_ui import admin_page
    return {
        'admin_page': admin_page
    }

def load_utils_functions():
    from .utils.spacy_utils import load_spacy_models
    return {
        'load_spacy_models': load_spacy_models
    }

def load_chatbot_functions():
    from .chatbot.chatbot import initialize_chatbot, process_chat_input
    return {
        'initialize_chatbot': initialize_chatbot,
        'process_chat_input': process_chat_input
        }

# Función para cargar todas las funciones
def load_all_functions():
    return {
        **load_auth_functions(),
        **load_database_functions(),
        # **load_ui_functions(),
        **load_admin_functions(),
        **load_morphosyntax_functions(),
        **load_semantic_functions(),
        **load_discourse_functions(),
        **load_utils_functions(),
        **load_chatbot_functions(),
        **load_student_activities_functions()
    }