"""
Nyilvános i18n API végpont a frontend számára.
Autentikációt NEM igényel, mivel a fordítások nyilvánosak.
"""
import json
import os
from fastapi import APIRouter, HTTPException, Path
from fastapi.responses import JSONResponse
from typing import Dict, Any

router = APIRouter()

# A statikus JSON fájlok elérési útja
LOCALES_DIR = os.path.join(os.path.dirname(__file__), "../../../static/locales")

def load_locale(lang: str) -> Dict[str, Any]:
    """Betölti a nyelvi JSON fájlt, ha nem létezik, fallback angol."""
    file_path = os.path.join(LOCALES_DIR, f"{lang}.json")
    fallback_path = os.path.join(LOCALES_DIR, "en.json")
    
    if not os.path.exists(file_path):
        # Ha a kért nyelv nem létezik, próbáljuk meg az angolt
        if lang != "en" and os.path.exists(fallback_path):
            file_path = fallback_path
        else:
            raise HTTPException(status_code=404, detail=f"Language '{lang}' not found")
    
    try:
        with open(file_path, "r", encoding="utf-8") as f:
            return json.load(f)
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Error loading translation file: {str(e)}")

@router.get("/{lang}", response_model=Dict[str, Any])
async def get_translations(
    lang: str = Path(..., description="Nyelvkód, pl. 'hu', 'en', 'de'", min_length=2, max_length=5)
):
    """
    Visszaadja a teljes fordításcsomagot a kért nyelvhez.
    
    - Ha a nyelv nem létezik, 404 hibát dob.
    - Ha a fájl sérült, 500 hibát dob.
    - A válasz egy JSON objektum, amelyben a kulcsok hierarchikusak.
    """
    translations = load_locale(lang)
    return translations

@router.get("/{lang}/{key:path}")
async def get_translation_by_key(
    lang: str = Path(..., description="Nyelvkód"),
    key: str = Path(..., description="Pontokkal elválasztott kulcs, pl. 'AUTH.LOGIN.TITLE'")
):
    """
    Visszaadja a fordításcsomag egy adott kulcsához tartozó értéket.
    
    - Ha a kulcs nem található, 404 hibát dob.
    - Támogatja a hierarchikus kulcsokat (pl. 'AUTH.LOGIN.TITLE').
    """
    translations = load_locale(lang)
    # Kulcs felbontása
    parts = key.split('.')
    current = translations
    for part in parts:
        if isinstance(current, dict) and part in current:
            current = current[part]
        else:
            raise HTTPException(status_code=404, detail=f"Translation key '{key}' not found for language '{lang}'")
    
    # Ha a current egy szótár, akkor azt adjuk vissza (részleges fa)
    # Ha sztring, akkor azt
    return {key: current}