#include <amxmodx>
#include <amxmisc>

#define PLUGIN_NAME "C4 Timer Display"
#define PLUGIN_VERSION "1.7"
#define PLUGIN_AUTHOR "yRestrict"

#define TASK_TIMER 652450
#define TASK_COLORCHANGE 652451

// Variáveis globais
new bool:g_bBombPlanted = false;
new Float:g_fPlantTime;
new g_iC4Timer;
new g_iHudSync;
new g_iColorIndex = 0;

// Cores para o gradiente do HUD (transição suave entre cores)
new g_Colors[][3] = {
    {255, 0, 0},     // Vermelho
    {255, 127, 0},   // Laranja
    {255, 255, 0},   // Amarelo
    {0, 255, 0},     // Verde
    {0, 0, 255},     // Azul
    {75, 0, 130},    // Índigo
    {148, 0, 211}    // Violeta
};

public plugin_init() 
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

    register_logevent("eventRoundStart", 2, "1=Round_Start");
    register_logevent("eventRoundEnd", 2, "1=Round_End");
    register_logevent("eventRoundRestart", 2, "1&RestartRound");

    register_event("BombDrop", "eventBombPlanted", "a");
    register_logevent("eventBombDefused", 3, "2=Defused_The_Bomb");
    register_logevent("eventBombExploded", 3, "2=Target_Bombed");

    g_iHudSync = CreateHudSyncObj();
}

public eventRoundStart() {
    resetBombTimer();
}

public eventRoundEnd() {
    resetBombTimer();
}

public eventRoundRestart() {
    resetBombTimer();
}

public eventBombPlanted() {
    if (g_bBombPlanted) {
        return PLUGIN_CONTINUE;
    }

    g_bBombPlanted = true;
    g_fPlantTime = get_gametime();
    g_iC4Timer = get_cvar_num("mp_c4timer");

    displayTimer();
    set_task(0.1, "change_color", TASK_COLORCHANGE, "", 0, "b");

    set_task(1.0, "displayTimer", TASK_TIMER, "", 0, "b");

    return PLUGIN_CONTINUE;
}

public eventBombDefused() {
    if (g_bBombPlanted) {
        resetBombTimer();
    }
    return PLUGIN_CONTINUE;
}

public eventBombExploded() {
    if (g_bBombPlanted) {
        resetBombTimer();
    }
    return PLUGIN_CONTINUE;
}

public change_color() {
    if (!g_bBombPlanted) {
        remove_task(TASK_COLORCHANGE);
        return;
    }

    g_iColorIndex = (g_iColorIndex + 1) % sizeof(g_Colors);
    
    displayTimer();
}

public displayTimer() {
    if (!g_bBombPlanted) {
        remove_task(TASK_TIMER);
        return PLUGIN_CONTINUE;
    }

    new Float:fElapsed = get_gametime() - g_fPlantTime;
    new iRemaining = floatround(float(g_iC4Timer) - fElapsed);

    if (iRemaining < 0) {
        iRemaining = 0;
    }

    new r = g_Colors[g_iColorIndex][0];
    new g = g_Colors[g_iColorIndex][1];
    new b = g_Colors[g_iColorIndex][2];

    set_hudmessage(r, g, b, -1.0, 0.85, 2, 0.1, 0.9, 0.06, 0.00, .alpha1 = 10, .color2 = { 255, 255, 255, 50 });

    ShowSyncHudMsg(0, g_iHudSync, 
        "--[CLAN TESTE]--^n--[ TEMPO C4: %d ]--^n[CLAN TESTE]", 
        iRemaining);

    return PLUGIN_CONTINUE;
}

resetBombTimer() 
{
    remove_task(TASK_TIMER);
    remove_task(TASK_COLORCHANGE);
    g_bBombPlanted = false;
    g_iColorIndex = 0;
}
