"""
Registry des modeles traduisibles et leurs champs

Format:
    'app_label.model_name': ['field1', 'field2', ...]

Les champs listes seront disponibles pour la traduction dans l'admin.
"""

TRANSLATABLE_MODELS = {
    # App Traduction
    'traduction.traducteur': [
        'value',
    ],
    # App Core
    'core.siteconfiguration': [
        'site_name',
        'site_description',
        'footer_text',
    ],
    'core.carouselslide': [
        'title',
        'subtitle',
    ],
    'core.programstatistic': [
        'label',
        'description',
    ],
    'core.partner': [
        'name',
        'description',
    ],
    'core.universitymapsettings': [
        'title',
        'subtitle',
    ],

    # App Universities
    'universities.university': [
        'name',
        'description',
    ],
    'universities.universitydepartment': [
        'name',
        'description',
    ],
    'universities.industrialpartner': [
        'name',
        'description',
    ],

    # App Program
    'program.program': [
        'name',
        'description',
        'objectives',
        'career_opportunities',
    ],
    'program.programhighlight': [
        'title',
        'description',
    ],
    'program.semester': [
        'name',
        'description',
    ],
    'program.course': [
        'name',
        'description',
        'objectives',
    ],
    'program.specialization': [
        'name',
        'description',
    ],
    'program.admissionrequirement': [
        'title',
        'description',
    ],
    'program.scholarship': [
        'name',
        'description',
        'eligibility',
    ],
    'program.faqitem': [
        'question',
        'answer',
    ],
    'program.applicationcall': [
        'title',
        'description',
        'documents_required',
        'additional_info',
    ],
    'program.applicationtimeline': [
        'title',
        'description',
    ],

    # App Team
    'team.person': [
        'bio',
        'research_interests',
    ],
    'team.professor': [
        'position',
        'department',
        'specialization',
        'academic_credentials',
    ],
    'team.phdstudent': [
        'thesis_title',
        'thesis_description',
    ],
    'team.masterstudent': [
        'thesis_title',
        'thesis_description',
    ],

    # App Research
    'research.researcharea': [
        'name',
        'description',
    ],
    'research.researchproject': [
        'title',
        'description',
    ],
    'research.publication': [
        'title',
        'abstract',
    ],

    # App News
    'news.newscategory': [
        'name',
        'description',
    ],
    'news.newsarticle': [
        'title',
        'content',
        'meta_description',
    ],
    'news.event': [
        'title',
        'description',
        'location',
    ],
    'news.eventtype': [
        'name',
        'description',
    ],

    # App Contact
    'contact.contactinfo': [
        'department_name',
        'office_hours',
    ],
    # App config
    'config.genre':[
        'libelle',
    ],
    'config.icon': [
        'libelle',
    ],
    'config.country': [
        'name',
    ],
    'config.stattype': [
        'name',
    ],

    # App CMS
    'cms.section': [
        'title',
        'description',
    ],
    'cms.page': [
        'title',
        'description',
    ],
    'cms.menuitem': [
        'title',
    ],
    'cms.settingtype': [
        'name',
    ],
    'cms.setting': [
        'value',
    ],
    'cms.button': [
        'text',
    ],
    'cms.pagesectionfieldvalue': [
        'text_value',
    ],
}


def get_translatable_models():
    """Retourne le dictionnaire des modeles traduisibles"""
    return TRANSLATABLE_MODELS


def get_translatable_fields(model):
    """
    Retourne la liste des champs traduisibles pour un modele donne

    Args:
        model: Une classe de modele Django ou une string 'app_label.model_name'

    Returns:
        Liste des noms de champs traduisibles ou liste vide
    """
    if isinstance(model, str):
        model_key = model.lower()
    else:
        model_key = f"{model._meta.app_label}.{model._meta.model_name}"

    return TRANSLATABLE_MODELS.get(model_key, [])


def is_translatable(model):
    """Verifie si un modele est traduisible"""
    if isinstance(model, str):
        model_key = model.lower()
    else:
        model_key = f"{model._meta.app_label}.{model._meta.model_name}"

    return model_key in TRANSLATABLE_MODELS


def register_translatable_model(model_key, fields):
    """
    Enregistre dynamiquement un modele traduisible

    Args:
        model_key: String 'app_label.model_name'
        fields: Liste des noms de champs a traduire
    """
    TRANSLATABLE_MODELS[model_key.lower()] = fields


def unregister_translatable_model(model_key):
    """Desenregistre un modele traduisible"""
    TRANSLATABLE_MODELS.pop(model_key.lower(), None)
