import json
import logging
import os

import streamlit as st

# Configuration du logger
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("translations")

def load_translations(lang="fr"):
    """Charge les traductions depuis le fichier JSON correspondant à la langue spécifiée.

    Args:
        lang (str): Code de langue (par défaut: "fr" pour français)

    Returns:
        dict: Dictionnaire des traductions ou un dictionnaire vide en cas d'erreur
    """
    try:
        file_path = os.path.join("assets", "locales", f"{lang}.json")
        if not os.path.exists(file_path):
            logger.warning(f"Fichier de traduction non trouvé: {file_path}")
            return {}

        with open(file_path, encoding="utf-8") as f:
            translations = json.load(f)
            logger.info(f"Traductions chargées: {lang}")
            return translations
    except Exception as e:
        logger.error(f"Erreur lors du chargement des traductions: {e}")
        return {}

def get_translation(key):
    """Récupère une traduction par sa clé.
    Les clés peuvent être hiérarchiques, séparées par des points.
    Exemple: "header.title" pour accéder à translations["header"]["title"]

    Args:
        key (str): Clé de traduction (peut être hiérarchique comme "header.title")
        default (str, optional): Valeur par défaut si la traduction n'est pas trouvée

    Returns:
        str: Texte traduit ou valeur par défaut
    """
    # Initialiser les traductions si nécessaire
    if "translations" not in st.session_state:
        st.session_state.translations = load_translations("fr")
        st.session_state.lang = "fr"

    # Si aucune traduction n'est chargée, retourner la valeur par défaut
    if not st.session_state.get("translations"):
        return f"⊗⤇ {key} ⤆⊗"

    # Parcourir la hiérarchie des clés
    keys = key.split(".")
    current = st.session_state.translations

    for k in keys:
        if not isinstance(current, dict) or k not in current:
            return f"⊗⤇ {key} ⤆⊗"
        current = current[k]

    return current

def set_language(lang="fr"):
    """Force l'utilisation d'une langue spécifique.

    Args:
        lang (str): Code de langue à utiliser
    """
    st.session_state.lang = lang
    st.session_state.translations = load_translations(lang)

# Initialiser la langue française par défaut
def init_translations():
    """Initialise les traductions avec la langue française"""
    if "translations" not in st.session_state:
        set_language("fr")

# Raccourci pour get_translation
_ = get_translation
