/*
    JOB GOAL

    CREATE TABLE `job_goal` (
        `id` INT NOT NULL,
        `user_id` INT NOT NULL,
        `contribution` INT NOT NULL,
        PRIMARY KEY (`id`)
    )
    COLLATE='utf8mb4_0900_ai_ci'
    ;
*/

#include <YSI_Coding\y_hooks>

#define JOB_GOAL_AMOUNT                     (100000000)

new JobGoalMoney, Text:JobGoalTD[2];

hook OnGameModeInit()
{
    defer UpdateJobGoal();

    JobGoalTD[0] = TextDrawCreate(85.000000, 319.000000, "~y~$0 ~w~~h~/ ~y~$500");
	TextDrawFont(JobGoalTD[0], 1);
	TextDrawLetterSize(JobGoalTD[0], 0.191666, 1.149999);
	TextDrawTextSize(JobGoalTD[0], 400.000000, 132.000000);
	TextDrawSetOutline(JobGoalTD[0], 1);
	TextDrawSetShadow(JobGoalTD[0], 0);
	TextDrawAlignment(JobGoalTD[0], 2);
	TextDrawColor(JobGoalTD[0], -1);
	TextDrawBackgroundColor(JobGoalTD[0], 255);
	TextDrawBoxColor(JobGoalTD[0], 50);
	TextDrawUseBox(JobGoalTD[0], 0);
	TextDrawSetProportional(JobGoalTD[0], 1);
	TextDrawSetSelectable(JobGoalTD[0], 0);

	JobGoalTD[1] = TextDrawCreate(85.000000, 300.000000, "Job Goal");
	TextDrawFont(JobGoalTD[1], 0);
	TextDrawLetterSize(JobGoalTD[1], 0.366665, 1.799998);
	TextDrawTextSize(JobGoalTD[1], 400.000000, 87.000000);
	TextDrawSetOutline(JobGoalTD[1], 1);
	TextDrawSetShadow(JobGoalTD[1], 0);
	TextDrawAlignment(JobGoalTD[1], 2);
	TextDrawColor(JobGoalTD[1], -1);
	TextDrawBackgroundColor(JobGoalTD[1], 255);
	TextDrawBoxColor(JobGoalTD[1], 50);
	TextDrawUseBox(JobGoalTD[1], 0);
	TextDrawSetProportional(JobGoalTD[1], 1);
	TextDrawSetSelectable(JobGoalTD[1], 0);
}

CB:OnJobGoalDataFetched()
{
    new money;
    JobGoalMoney = 0;

    for(new x; x < cache_num_rows(); x++)
    {
        cache_get_value_name_int(0, "contribution", money);
        JobGoalMoney += money;
    }

    return 1;
}

stock FetchJobGoalStats()
{
    mysql_tquery(SQL, "SELECT * FROM `job_goal`", "OnJobGoalDataFetched", "");
}

stock IncrementJobGoal(playerid, amount)
{
    JobGoalMoney += amount;

    gQuery[0] = EOS;
    mysql_format(SQL, gQuery, sizeof(gQuery), "SELECT * FROM `job_goal` WHERE `user_id` = '%d'", playerVariables[playerid][pSQLID]);
    mysql_pquery(SQL, gQuery, "OnJobGoalUpdated", "ii", playerVariables[playerid][pSQLID], amount);

    SCM(playerid, COLOR_HELLO, "Ai contribuit cu $%s la job goal!", FormatNumber(amount));
    return 1;
}

CB:OnJobGoalUpdated(user_id, amount)
{   
    gQuery[0] = EOS;
    if(!cache_num_rows())
    {
        mysql_format(SQL, gQuery, sizeof(gQuery), "INSERT INTO `job_goal` (`user_id`, `contribution`) VALUES ('%d', '%d')", user_id, amount);
    }

    else
    {
        mysql_format(SQL, gQuery, sizeof(gQuery), "UPDATE `job_goal` SET `contribution` = `contribution` + %d WHERE `user_id` = '%d'", amount, user_id);
    }

    mysql_tquery(SQL, gQuery, "", "");

    if(JobGoalMoney >= JOB_GOAL_AMOUNT)
    {
        mysql_pquery(SQL, "SELECT * FROM `job_goal` WHERE `contribution` > '1000' ORDER BY `contribution` DESC LIMIT 10", "OnJobGoalCompleted", "");
    }

    UpdateJobGoalUI();
}

CB:OnJobGoalCompleted()
{
    va_SendClientMessageToAll(COLOR_ANNOUNCE, "(( Job Goal: Goal-ul a fost completat! Primii %d jucatori au fost rasplatiti. ))", cache_num_rows());
    
    new user_id, prize = cache_num_rows() * 10;
    for(new x; x < cache_num_rows(); x++)
    {
        cache_get_value_name_int(x, "user_id", user_id);

        new playerid = getPlayerID(user_id);
        if(playerid != INVALID_PLAYER_ID)
        {
            playerVariables[playerid][pAmethysts] += prize;
            SCM(playerid, COLOR_MONEY, "(+) Ai primit %d ametiste deoarece ai fost al #%d-lea jucator in topul de la job goal.", prize, x + 1);
        }

        else
        {
            gQuery[0] = EOS;
            mysql_format(SQL, gQuery, sizeof(gQuery), "UPDATE `server_accounts` SET `playerAmethysts` = `playerAmethysts` + %d WHERE `user_id` = '%d'", prize, user_id);
            mysql_tquery(SQL, gQuery, "", "");
        }

        prize -= 10;
    }

    mysql_tquery(SQL, "TRUNCATE `job_goal`");

    JobGoalMoney = 0;
    UpdateJobGoalUI();
    return 1;
}

stock UpdateJobGoalUI()
{
    new string[64];
    format(string, sizeof(string), "~y~$%s~w~~h~ / ~y~$%s", FormatNumber(JobGoalMoney), FormatNumber(JOB_GOAL_AMOUNT));
    TextDrawSetString(JobGoalTD[0], string);
    return 1;
}

timer UpdateJobGoal[10000]() 
{
    FetchJobGoalStats();
}

CB:ShowJobGoalUI(playerid)
{
    for(new x; x < 2; x ++) TextDrawShowForPlayer(playerid, JobGoalTD[x]);
}

CB:HideJobGoalUI(playerid)
{
    for(new x; x < 2; x ++) TextDrawHideForPlayer(playerid, JobGoalTD[x]);
}

CB:ShowJobGoalInfo(playerid)
{
    if(!cache_num_rows())
    {
        SCM(playerid, COLOR_MONEY, "* You have no contribution at the job goal.");
    }

    else
    {
        new money;
        cache_get_value_name_int(0, "contribution", money);

        SCM(playerid, COLOR_MONEY, "Your contribution: $%s", FormatNumber(money));
    }
    
    return 1;
}

CMD:jobgoal(playerid, params[])
{
    SCM(playerid, COLOR_MONEY, "Job goal: $%s / $%s", FormatNumber(JobGoalMoney), FormatNumber(JOB_GOAL_AMOUNT));

    gQuery[0] = EOS;
    mysql_format(SQL, gQuery, sizeof(gQuery), "SELECT * FROM `job_goal` WHERE `user_id` = '%d'", playerVariables[playerid][pSQLID]);
    mysql_pquery(SQL, gQuery, "ShowJobGoalInfo", "i", playerid);
    return 1;
}