-- ============================================================
-- Asylum Compagnon — Locale.lua
-- Localisation FR / EN. Le client français (frFR) affiche le français
-- (les chaînes du code SONT les clés françaises → identité, zéro coût) ;
-- tout autre client affiche l'anglais via le dictionnaire ci-dessous.
--
-- Les noms de CLASSES et de SORTS ne sont PAS traduits ici : on les lit
-- directement dans le jeu (déjà localisés) via NS.ClassLabel / NS.SpellName.
-- Jargon WoW EN vérifié (Wowhead / client officiel).
-- ============================================================

local ADDON_NAME, NS = ...

local EN = (GetLocale and GetLocale() ~= "frFR") or false

-- Dictionnaire : clé française (telle qu'écrite dans le code) → anglais.
-- Les chaînes de format gardent les mêmes spécificateurs (%s/%d/%%) et
-- le même ordre dans les deux langues.
local DICT = {
    -- ---- Navigation / titres de page ----
    ["Accueil"]              = "Home",
    ["Optimisation"]         = "Optimization",
    ["Inventaire"]           = "Inventory",
    ["Kicks"]                = "Kicks",
    ["Cooldowns"]            = "Cooldowns",
    ["Cooldowns de groupe"]  = "Group Cooldowns",
    ["Buffs & auras"]        = "Buffs & Auras",
    ["Butin"]                = "Loot",
    ["Clés & Coffre"]        = "Keys & Vault",
    ["Alertes"]              = "Alerts",

    -- ---- Boutons génériques ----
    ["Actualiser"]           = "Refresh",
    ["« Retour"]             = "« Back",
    ["Réinitialiser la position"] = "Reset position",

    -- ---- Accueil ----
    ["Asylum Compagnon"]     = "Asylum Companion",
    ["Asylum |cff%sCompagnon|r"] = "Asylum |cff%sCompanion|r",
    ["Bienvenue dans l'addon de Test Asylum"] = "Welcome to Asylum Companion",
    ["Image d'accueil manquante :\nAsylumCompagnon\\media\\accueil.tga\n\n(un redémarrage complet du jeu est nécessaire\naprès l'ajout du fichier)"] =
        "Welcome image missing:\nAsylumCompagnon\\media\\accueil.tga\n\n(a full game restart is required\nafter adding the file)",
    ["Aucun ami détecté.\nRejoins un groupe ou une guilde où l'addon est installé."] =
        "No friend detected.\nJoin a party or guild where the addon is installed.",

    -- ---- Optimisation : étapes Raidbots + statuts ----
    ["|cff%s1|r · Ouvre Raidbots :"] = "|cff%s1|r · Open Raidbots:",
    ["|cff%s2|r · Copie le code (clic = tout sélectionner, puis Ctrl+C) :"] =
        "|cff%s2|r · Copy the profile (click = select all, then Ctrl+C):",
    ["|cff%s3|r · Colle sur Raidbots et lance la simulation."] =
        "|cff%s3|r · Paste on Raidbots and run the sim.",
    ["Code généré "]        = "Profile generated ",
    ["Code reçu %s"]        = "Profile received %s",
    ["  |cffeab308(plus récent dispo)|r"] = "  |cffeab308(newer available)|r",
    ["# Impossible de générer le code pour l'instant."] =
        "# Unable to generate the profile right now.",
    ["# Pas encore de code reçu pour ce personnage.\n"] =
        "# No profile received for this character yet.\n",
    ["# Clique « Actualiser » pour lui demander son code."] =
        "# Click \"Refresh\" to request their profile.",
    ["demande envoyée…"]    = "request sent…",
    ["synchro indisponible"] = "sync unavailable",
    ["synchro "]            = "sync ",
    ["Synchro active"]      = "Sync active",
    ["Synchro indisponible"] = "Sync unavailable",

    -- ---- Optimisation / Inventaire ----
    ["en direct"]            = "live",
    ["en ligne"]             = "online",
    ["hors ligne"]           = "offline",
    ["(toi)"]                = "(you)",
    ["Niveau %d"]            = "Level %d",
    ["Niveau "]              = "Level ",
    ["# Il doit être en ligne avec l'addon installé.\n"] =
        "# They must be online with the addon installed.\n",
    ["Code SimulationCraft"] = "SimulationCraft profile",
    ["Ouvrir Raidbots Top Gear"] = "Open Raidbots Top Gear",
    ["Clic dans la zone → tout est sélectionné → Ctrl+C pour copier."] =
        "Click the box → everything is selected → Ctrl+C to copy.",
    ["Aucun consommable suivi possédé pour l'instant."] =
        "No tracked consumable owned yet.",
    ["Aucun consommable suivi possédé."] = "No tracked consumable owned.",
    ["Inventaire non reçu (version d'addon trop ancienne)."] =
        "Inventory not received (addon version too old).",
    ["Sacs + banque · |cffea48500|r = épuisé · |cfffacd40≤%d|r = stock bas"] =
        "Bags + bank · |cffea48500|r = out · |cfffacd40≤%d|r = low",
    ["Dernière synchro · |cffea48500|r = épuisé · |cfffacd40≤%d|r = stock bas"] =
        "Last sync · |cffea48500|r = out · |cfffacd40≤%d|r = low",

    -- ---- Kicks ----
    ["Suivi des interruptions (kicks)"] = "Interrupt (kick) tracker",
    ["Afficher l'encadré des kicks dans l'interface"] = "Show the kick frame",
    ["Opacité du fond de l'encadré : |cff%s%d%%|r"] = "Frame background opacity: |cff%s%d%%|r",
    ["PRÊT"]                 = "READY",
    ["Suivis actuellement : "] = "Currently tracked: ",
    ["personne"]            = "nobody",
    ["|cff22c55ePRÊT|r = kick disponible · |cfff2a33c12 s|r = en recharge\n|TInterface\\RaidFrame\\ReadyCheck-Ready:14|t = sort bien interrompu · |TInterface\\RaidFrame\\ReadyCheck-NotReady:14|t = kick dans le vent"] =
        "|cff22c55eREADY|r = interrupt available · |cfff2a33c12 s|r = on cooldown\n|TInterface\\RaidFrame\\ReadyCheck-Ready:14|t = spell interrupted · |TInterface\\RaidFrame\\ReadyCheck-NotReady:14|t = wasted kick",
    ["\n|cffea4850Détection indisponible (restrictions Blizzard) — un /reload peut aider.|r"] =
        "\n|cffea4850Detection unavailable (Blizzard restrictions) — a /reload may help.|r",

    -- ---- Cooldowns ----
    ["Tracker de cooldowns de groupe"] = "Group cooldown tracker",
    ["Afficher l'encadré des cooldowns"] = "Show the cooldown frame",
    ["Opacité du fond : |cff%s%d%%|r"] = "Background opacity: |cff%s%d%%|r",
    ["Blocs — clic = tout afficher / tout masquer :"] = "Blocks — click to show / hide all:",
    ["Offensifs"]           = "Offensive",
    ["Défensifs"]           = "Defensive",
    ["Externes"]            = "External",
    ["Externes / raid"]     = "External / raid",
    ["Bloodlust"]           = "Bloodlust",
    ["Résurr."]             = "Res",
    ["Résurrection"]        = "Res",
    ["Battle Rez : |cff22c55e%d|r"] = "Battle Rez: |cff22c55e%d|r",
    ["Lust actif"]          = "Lust active",
    ["Sated"]               = "Sated",
    ["Lust"]                = "Lust",
    ["Prêt"]                = "Ready",
    ["Catégorie dans l'infobulle"] = "Category in tooltip",
    ["Suivre les potions de combat"] = "Track combat potions",
    ["Prochaine charge :"]  = "Next charge:",
    ["charges"]             = "charges",
    ["Offensif"]            = "Offensive",
    ["Défensif"]            = "Defensive",
    ["Externe"]             = "External",
    ["Potion"]              = "Potion",
    ["Potions"]             = "Potions",

    -- ---- Buffs & auras / appel ----
    ["Préparation du groupe"] = "Group readiness",
    ["Flacon"]              = "Flask",
    ["Bouffe"]              = "Food",
    ["Huile"]               = "Oil",
    -- libellés courts de buffs de classe (colonnes de la grille)
    ["Robu."]               = "Stam",   -- Robustesse / Stamina
    ["Int."]                = "Int",    -- Intelligence
    ["Sauvage"]             = "Vers",   -- Marque du fauve / Versatility
    ["Cri"]                 = "AP",     -- Cri de guerre / Attack Power
    ["Furie"]               = "Mast",   -- Furie-des-cieux / Mastery
    ["Aura"]                = "Aura",   -- Auras paladin
    ["Appel — tout le monde est prêt |cff22c55e✓|r (flacon / bouffe / huile / buffs OK)"] =
        "Ready check — everyone's ready |cff22c55e✓|r (flask / food / oil / buffs OK)",
    ["Appel — préparation du groupe :"] = "Ready check — group readiness:",
    ["|cffea4850manque|r "] = "|cffea4850missing|r ",
    ["check appel indisponible ("] = "ready-check report unavailable (",

    -- ---- Butin (loot) ----
    ["Aide au butin"]       = "Loot helper",
    ["Survole un objet équipable (sac, butin, lien de chat) : l'addon dit pour qui du groupe c'est un up, d'après l'équipement partagé. Comparaison par ilvl, filtrée par classe et spé."] =
        "Hover any equippable item (bag, loot window, chat link): the addon shows who in the group it upgrades, from shared gear. Item-level comparison, filtered by class and spec.",
    ["Afficher les upgrades dans les infobulles"] = "Show upgrades in tooltips",
    ["Afficher SpellID / IconID dans les infobulles"] = "Show SpellID / IconID in tooltips",
    ["Asylum — up pour :"] = "Asylum — upgrade for:",
    ["Asylum|r |cff8b8fa3— aucun up dans le groupe|r"] = "Asylum|r |cff8b8fa3— no upgrade in the group|r",
    [" |cff8b8fa3· faibles : "] = " |cff8b8fa3· weak: ",
    [" |cffcfd2dc· ilvl moy "] = " |cffcfd2dc· avg ilvl ",
    [" |cff8b8fa3· pas de données|r"] = " |cff8b8fa3· no data|r",
    -- emplacements
    ["Tête"] = "Head", ["Cou"] = "Neck", ["Épaules"] = "Shoulders", ["Dos"] = "Back",
    ["Torse"] = "Chest", ["Poignets"] = "Wrists", ["Mains"] = "Hands", ["Ceinture"] = "Waist",
    ["Jambes"] = "Legs", ["Pieds"] = "Feet", ["Anneau 1"] = "Ring 1", ["Anneau 2"] = "Ring 2",
    ["Bijou 1"] = "Trinket 1", ["Bijou 2"] = "Trinket 2", ["Arme (MD)"] = "Main hand",
    ["Main gauche"] = "Off hand",
    -- enchantements
    ["Enchantements"] = "Enchants",
    ["Cape"] = "Cloak", ["Arme"] = "Weapon",
    -- inventaire (refonte)
    ["Mes consommables"] = "My consumables",
    ["Qui en a (groupe)"] = "Who has it (group)",
    ["Tous les personnages"] = "All characters",
    ["Tout afficher"] = "Show all",
    ["Personne dans ton groupe n'en a."] = "Nobody in your group has any.",
    ["Clique un consommable à gauche pour voir qui en a."] =
        "Click a consumable on the left to see who has it.",

    -- ---- Clés & Coffre ----
    ["Clés Mythique+ & Coffre convoité"] = "Mythic+ Keys & Great Vault",
    ["Survole un nom pour afficher son coffre (9 cases). Données partagées par les amis."] =
        "Hover a name to show their vault (9 slots). Data shared by friends.",
    ["Pas encore de données de coffre."] = "No vault data yet.",
    ["aucune clé"]          = "no keystone",
    ["Ready check"]         = "Ready check",
    ["Pull"]                = "Pull",
    ["Insérer ma clé automatiquement"] = "Auto-insert my keystone",
    ["Boutons Ready check + Pull sur la fenêtre de clé"] =
        "Ready check + Pull buttons on the keystone window",
    ["Raid"] = "Raid", ["Donjons"] = "Dungeons", ["Monde"] = "World", ["PvP"] = "PvP",
    ["Gouffres"] = "Delves", ["Piste"] = "Track",

    -- ---- Alertes / réglages ----
    ["Alertes de stock épuisé"] = "Out-of-stock alerts",
    ["Message dans le chat"]    = "Chat message",
    ["Alerte au centre de l'écran"] = "On-screen (raid warning)",
    ["Alerte sonore"]           = "Sound alert",
    ["Fonctionnalités (affichage local)"] = "Features (local display)",
    ["Couper l'affichage n'empêche jamais l'envoi des infos à tes amis : leur addon reste à jour."] =
        "Turning off a display never stops sharing your data with friends: their addon stays up to date.",
    ["Rapport chat à l'appel (ready check)"] = "Chat report on ready check",

    -- ---- Alertes stock (Core) ----
    ["|cffea4850stock épuisé :|r %s"] = "|cffea4850out of stock:|r %s",
    ["Stock épuisé : %s"] = "Out of stock: %s",
    ["|cfffacd40stock bas :|r %s (%d)"] = "|cfffacd40low stock:|r %s (%d)",
    ["Stock bas : %s (%d)"] = "Low stock: %s (%d)",

    -- ---- Slash / messages Core ----
    ["chargé — |cff%s/asylum|r pour ouvrir, ou clique le bouton autour de la minimap."] =
        "loaded — |cff%s/asylum|r to open, or click the button around the minimap.",
    ["tes buffs actuels :"] = "your current buffs:",
    ["annonce envoyée au groupe et à la guilde."] = "announce sent to party and guild.",
    ["synchro indisponible (canal de communication non enregistré)."] =
        "sync unavailable (addon channel not registered).",
    ["réglages remis par défaut (liste d'amis vidée)."] =
        "settings restored to defaults (friend list cleared).",
    ["commandes : |cffffffff/asylum|r ouvrir · |cffffffff/asylum sync|r annoncer · |cffffffff/asylum reset|r"] =
        "commands: |cffffffff/asylum|r open · |cffffffff/asylum sync|r announce · |cffffffff/asylum reset|r",
    ["cooldowns suivis pour %s :"] = "tracked cooldowns for %s:",
    [" |cff22c55e[affiché]|r"] = " |cff22c55e[shown]|r",

    -- ---- Minimap / tooltip bouton ----
    ["Clic gauche : ouvrir / fermer"] = "Left-click: open / close",
    ["Glisser : déplacer le bouton"]  = "Drag: move the button",
}

-- Traduit une chaîne (client FR : identité ; sinon EN via dictionnaire).
function NS.L(s)
    if not EN then return s end
    if s == nil then return s end
    return DICT[s] or s
end

-- Nom de classe localisé par le jeu (déjà FR sur client FR, EN sinon).
function NS.ClassLabel(token)
    if token and LOCALIZED_CLASS_NAMES_MALE and LOCALIZED_CLASS_NAMES_MALE[token] then
        return LOCALIZED_CLASS_NAMES_MALE[token]
    end
    return token or "?"
end

-- Nom de sort localisé par le jeu (fallback = libellé fourni).
function NS.SpellName(spellID, fallback)
    if spellID then
        local getName = (C_Spell and C_Spell.GetSpellName) or GetSpellInfo
        if getName then
            local ok, name = pcall(getName, spellID)
            if ok and name and name ~= "" then return name end
        end
    end
    return fallback
end
