-- autorun/laundromat_init.lua
-- Bootstrap de l'addon laundromat_system.
-- Ordre de chargement : sh_config → sh_api → sv_* → cl_*
-- Jamais de AddCSLuaFile sur les sv_*.
--
-- DÉPENDANCES (vérifiées au démarrage) :
--   • DBALib v0.8.0+
--   • dirtymoney_system (DirtyMoney)
--   • laundering_system (Laundering + Laundering.Execute)

-- ============================================================================
-- SERVEUR
-- ============================================================================

if SERVER then
    -- AddCSLuaFile EN PREMIER, inconditionnellement : les clients doivent
    -- recevoir ces fichiers même si le serveur saute l'init pour cause de
    -- dépendance manquante (sinon les include côté client échouent).
    AddCSLuaFile("laundromat/sh_config.lua")
    AddCSLuaFile("laundromat/sh_api.lua")
    AddCSLuaFile("laundromat/cl_net.lua")
    AddCSLuaFile("laundromat/cl_ui.lua")
    -- JAMAIS AddCSLuaFile sur les sv_*

    -- Soft warnings : les deps peuvent ne pas être encore chargées au moment de l'autorun
    -- (ordre des addons non garanti dans GMod). On charge quand même et on
    -- vérifie au runtime quand les fonctions sont appelées.
    if not DirtyMoney then
        ErrorNoHalt("[Laundromat] dirtymoney_system non détecté au boot — vérification reportée au runtime.\n")
    end
    if not Laundering or not Laundering.Execute then
        ErrorNoHalt("[Laundromat] laundering_system non détecté au boot — vérification reportée au runtime.\n")
    end

    -- Chargement serveur dans l'ordre des dépendances
    include("laundromat/sh_config.lua")    -- Config (doit être premier)
    include("laundromat/sh_api.lua")       -- Namespace + _activeMachines

    include("laundromat/sv_storage.lua")   -- SQLite CRUD (avant sv_machine)
    include("laundromat/sv_machine.lua")   -- SpawnMachine + InitPostEntity
    include("laundromat/sv_core.lua")      -- Hooks Laundering.Started/Completed/Cancelled
    include("laundromat/sv_net.lua")       -- AddNetworkString + net.Receive
    include("laundromat/sv_commands.lua")  -- Concommands admin

    -- Initialisation du schéma SQLite
    Laundromat.Storage.Init()

    print("[Laundromat] Système de laverie chargé (V2 — démo Laundering.Execute).")
end

-- ============================================================================
-- CLIENT
-- ============================================================================

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