-- autorun/armurier_init.lua
-- Bootstrap de l'addon armurier_system.
-- Ordre de chargement :
--   (serveur) sh_config → sh_api → sv_storage → sv_net → sv_hooks → sv_commands
--   (client)  sh_config → sh_api → cl_net → cl_ui
--
-- Enregistre le job DarkRP (Armurier) et l'entité spawnable (caisse) en SHARED
-- pour que TEAM_ARMURIER existe aussi côté client (HUD de la caisse).
-- JAMAIS AddCSLuaFile sur les sv_*.

-- ============================================================================
-- SERVEUR : envoi des fichiers client + includes serveur + init SQLite
-- ============================================================================

if SERVER then
    -- AddCSLuaFile EN PREMIER — les clients doivent recevoir ces fichiers
    -- même si le serveur saute l'init pour cause de dépendance manquante.
    AddCSLuaFile("armurier/sh_config.lua")
    AddCSLuaFile("armurier/sh_api.lua")
    AddCSLuaFile("armurier/cl_net.lua")
    AddCSLuaFile("armurier/cl_ui.lua")
    -- JAMAIS AddCSLuaFile sur les sv_*

    -- Chargement serveur dans l'ordre des dépendances
    include("armurier/sh_config.lua")   -- Config shared
    include("armurier/sh_api.lua")      -- Namespace + cache
    include("armurier/sv_storage.lua")  -- SQLite CRUD
    include("armurier/sv_caisse.lua")   -- Caisses persistantes (admin-placées)
    include("armurier/sv_net.lua")      -- net strings + net.Receive
    include("armurier/sv_hooks.lua")    -- DarkRP hooks + sellback
    include("armurier/sv_commands.lua") -- Concommands admin

    -- Initialisation du schéma SQLite (après que toutes les fonctions sont chargées)
    Armurier.Storage.Init()
end

-- ============================================================================
-- CLIENT : includes
-- ============================================================================

if CLIENT then
    include("armurier/sh_config.lua")
    include("armurier/sh_api.lua")
    include("armurier/cl_net.lua")
    include("armurier/cl_ui.lua")
end

-- ============================================================================
-- SHARED : job Armurier + entité spawnable DarkRP
-- IMPORTANT : ces définitions doivent attendre que le gamemode DarkRP ait créé
-- le global `DarkRP`. Les fichiers lua/autorun/ se chargent AVANT l'init DarkRP,
-- donc `DarkRP` est nil ici. On enregistre via le hook officiel
-- `loadCustomDarkRPItems` (et immédiatement si DarkRP est déjà prêt, pour rester
-- robuste quel que soit l'ordre de chargement / hot-reload).
-- L'enregistrement tourne sur les DEUX réalms pour que TEAM_ARMURIER existe
-- aussi côté client (utilisé par le HUD de la caisse dans cl_init.lua).
-- ============================================================================

local function Armurier_RegisterDarkRPItems()
    local cfg = Armurier.Config

    TEAM_ARMURIER = DarkRP.createJob(cfg.JobName, {
        color       = cfg.JobColor,
        model       = cfg.JobModels,
        description = cfg.JobDescription,
        weapons     = cfg.JobWeapons,
        command     = cfg.JobCommand,
        max         = cfg.JobMax,
        salary      = cfg.JobSalary,
        admin       = 0,
        vote        = false,
        hasLicense  = true,
        candemote   = false,
    })

    -- NOTE : la caisse n'est PAS un spawnable F4. Elle est posée par un admin
    -- (spawnmenu AdminOnly ou commande armurier_spawncaisse) et persistée par map
    -- via sv_caisse.lua. Voir aussi ENT.Spawnable/AdminOnly dans le SENT.

    if SERVER then
        print("[Armurier] Système armurier_system chargé. Job TEAM_ARMURIER = " .. tostring(TEAM_ARMURIER))
    end
end

if DarkRP and DarkRP.createJob then
    -- DarkRP déjà chargé (ex: hot-reload de l'addon) → enregistre tout de suite.
    Armurier_RegisterDarkRPItems()
else
    -- Cas normal au démarrage : DarkRP pas encore prêt → on diffère.
    hook.Add("loadCustomDarkRPItems", "Armurier.RegisterDarkRPItems", Armurier_RegisterDarkRPItems)
end
