import os
import json
from flask import request, session

LOCALES_DIR = os.path.join(os.path.dirname(__file__), "locales")

_TRANSLATIONS = {}
_FALLBACK = "en"


def _load_locale(lang):
    path = os.path.join(LOCALES_DIR, f"{lang}.json")
    if not os.path.exists(path):
        path = os.path.join(LOCALES_DIR, f"{_FALLBACK}.json")
    with open(path, encoding="utf-8") as f:
        return json.load(f)


def init_translations():
    for fn in os.listdir(LOCALES_DIR):
        if fn.endswith(".json"):
            lang = fn.replace(".json", "")
            _TRANSLATIONS[lang] = _load_locale(lang)
    # ensure fallback loaded
    _TRANSLATIONS[_FALLBACK] = _load_locale(_FALLBACK)


def get_translator(lang=None):
    if not lang:
        lang = session.get("lang") or getattr(request, "i18n_lang", None) or _FALLBACK
    t_data = _TRANSLATIONS.get(lang, _TRANSLATIONS[_FALLBACK])
    base = _TRANSLATIONS[_FALLBACK]

    def t(key, **kw):
        val = t_data.get(key) or base.get(key) or key
        if kw:
            try:
                val = val.format(**kw)
            except Exception:
                pass
        return val

    return t


RTL_LANGS = {"fa", "ar", "ur", "he"}
