-- Sleek RP - Warlock Pets (Env.lua)
-- Détection d’environnement centralisée : versions Classic (Era/BCC/MoP), capacités API disponibles.
-- Unique source de vérité pour activer les shims dans le reste de l’addon.

local ADDON_NAME, SRPWL = ...
SRPWL = SRPWL or {}
_G.SRPWL = SRPWL

local Env = {}
SRPWL.Env = Env

-- Interface number (ex: 11507 Era, 20504 BCC, 50500 MoP, 110002 Retail)
Env.interface = select(4, GetBuildInfo())

-- Capacités API (présence des modules, fonctions…)
Env.hasMountJournal = (C_MountJournal and type(C_MountJournal.GetNumMounts) == "function") and true or false
Env.hasCMap         = (C_Map and type(C_Map.GetBestMapForUnit) == "function") and true or false

-- Addon Compartment (Retail only en général)
Env.hasAddonCompartment = (type(_G.AddonCompartmentFrame) == "table" and type(_G.AddonCompartmentFrame.RegisterAddon) == "function")
  or (type(C_AddOns) == "table" and type(C_AddOns.RegisterAddonCompartment) == "function") or false

-- Flavor helpers (grossiers mais suffisants pour piloter nos shims)
-- Nota: on NE branche rien de critique sur ces bornes; elles pilotent des fallbacks "safe".
Env.isEra = (Env.interface >= 11300 and Env.interface < 20000)       -- 1.x Classic Era (ex: 11507)
Env.isBCC = (Env.interface >= 20000 and Env.interface < 30000)       -- 2.5.x BCC (ex: 20504)
Env.isMoP = (Env.interface >= 50000 and Env.interface < 51000)       -- 5.0.x MoP Classic (ex: 50500)

-- Helper commun pour log debug (utilise DB.debug == true si dispo)
local function IsDebug()
  local DB = _G.SleekRP_WLP_DB
  return DB and DB.debug == true
end
function Env.log(...)
  if IsDebug() then
    print("|cff88fSleekRP:Env|r", ...)
  end
end

-- Par sécurité, exposer IsInInstance “safe” (toujours présent mais on garde la signature)
function Env.IsInInstance()
  local inInstance, instType = IsInInstance()
  return inInstance, instType
end

-- Monture: test basique universel (existe partout)
function Env.IsMounted()
  if type(IsMounted) == "function" then
    return IsMounted()
  end
  return false
end

-- Map helpers
function Env.GetZoneText()
  local sub = GetSubZoneText()
  local zone = GetRealZoneText()
  if sub and sub ~= "" then return sub end
  return zone or ""
end

-- Normalisation de clé simple (ASCII-like, espaces -> "_")
local rep = string.gsub
function Env.KeyFromText(s)
  s = tostring(s or ""):gsub("%s+", "_")
  s = s:gsub("[%z\1-\31\127]", "")
  -- on garde simple : pas de strip accent avancé pour rester léger
  return s
end
