#include "hook_weapon"
#include "player_data"
#include "shop"
#include "trigger_observer"

void MapInit() {
    g_Module.ScriptInfo.SetAuthor("grunt");
    g_Module.ScriptInfo.SetContactInfo("https://steamcommunity.com/profiles/76561198353915807");

    array<string> soundFiles = {
        "hookwars/insufficient_gold.ogg",
        "hookwars/placed.ogg",
        "hookwars/stab.ogg",
        "hookwars/swoosh.ogg",
        "weapons/xbow_hit1.wav",
        "hookwars/purchased.ogg"
    };

    for (uint i = 0; i < soundFiles.length(); i++) {
        g_Game.PrecacheGeneric("sound/" + soundFiles[i]);
        g_SoundSystem.PrecacheSound(soundFiles[i]);
    }

    HookWeapon::RegisterHookWeapon();
    
    g_Hooks.RegisterHook(Hooks::Player::ClientDisconnect, @PlayerDataManagement::ClientDisconnect);
    g_Hooks.RegisterHook(Hooks::Player::ClientPutInServer, @PlayerDataManagement::ClientPutInServer);
    
    g_Hooks.RegisterHook(Hooks::Player::ClientSay, @CombinedClientSay);
    
    g_Hooks.RegisterHook(Hooks::Player::PlayerPostThink, @Shop::PlayerPostThink);
    
    g_Hooks.RegisterHook(Hooks::Player::PlayerSpawn, @Shop::PlayerSpawn);
    
    g_Hooks.RegisterHook(Hooks::Player::PlayerKilled, @Shop::PlayerKilled);
    
    Shop::InitializeMenuItems();

    TriggerObserver::Init();
}

HookReturnCode CombinedClientSay(SayParameters@ pParams) {
    HookReturnCode result = Shop::ShopClientSay(pParams);
    if (result == HOOK_CONTINUE) {
    }
    return result;
}
