#include <amxmodx>
#include <reapi>

new const lf[] = "^1[^4MatQuiz^1]"
	
new g_iAnswer
new g_szQuestion[64]
new bool:g_bQuestionAsked

new g_pInterval, g_pReward, g_pDifficulty, g_pIntervalMG, g_pRewardMG

native pGetCoin(id);
native pSetCoin(id, amount);
native jb_get_user_packs(id);
native jb_set_user_packs(id, iNewValue);

public plugin_init() {
    register_plugin("ReAPI MatQuiz", "1.0", "Le Fleau")

    register_clcmd("say", "clcmd_say")
    register_clcmd("say", "clcmd_saymg")

    g_pInterval = register_cvar("matquiz_interval", "60.0") // jpoint saniye 
    g_pIntervalMG = register_cvar("matquizmg_interval", "30.0") // mg saniye
    g_pRewardMG = register_cvar("matquiz_reward", "10")     // mg ödülü
    g_pReward = register_cvar("matquiz_reward", "1000")     // jpoint ödülü
    g_pDifficulty = register_cvar("matquiz_difficulty", "2") // 1 = kolay, 2 = orta, 3 = zor

    set_task(get_pcvar_float(g_pInterval), "task_ask_question", _, _, _, "b")
    set_task(get_pcvar_float(g_pIntervalMG), "task_ask_question", _, _, _, "b")
    register_concmd("matquiz_start", "task_ask_question", ADMIN_BAN, "Manuel soru başlatır")
}

public clcmd_saymg(id) {
    if (!g_bQuestionAsked)
        return PLUGIN_CONTINUE

    new szMsg[32]
    read_args(szMsg, charsmax(szMsg))
    remove_quotes(szMsg)

    if (str_to_num(szMsg) == g_iAnswer) {
        new mg = jb_get_user_packs(id)
        jb_set_user_packs(id, mg + g_pRewardMG);
        g_bQuestionAsked = false
        client_print_color(0, 0, "%s ^3%s ^1dogru cevabi verdi: ^4%s = %d ^1(^4+%i MG^1)", lf, get_player_name(id), g_szQuestion, g_iAnswer, g_pRewardMG)
    }

    return PLUGIN_CONTINUE
}

public clcmd_say(id) {
    if (!g_bQuestionAsked)
        return PLUGIN_CONTINUE

    new szMsg[32]
    read_args(szMsg, charsmax(szMsg))
    remove_quotes(szMsg)

    if (str_to_num(szMsg) == g_iAnswer) {
        new jpoint = pGetCoin(id);
        pSetCoin(id, jpoint + g_pReward);
        g_bQuestionAsked = false
        client_print_color(0, 0, "%s ^3%s ^1dogru cevabi verdi: ^4%s = %d ^1(^4+%i JPoint^1)", lf, get_player_name(id), g_szQuestion, g_iAnswer, g_pReward)
    }

    return PLUGIN_CONTINUE
}

public task_ask_question() {
    if (g_bQuestionAsked) return

    new a = random_num(1, 20)
    new b = random_num(1, 20)
    new op = get_random_operator()

    switch (op) {
        case 0: {
            g_iAnswer = a + b
            formatex(g_szQuestion, charsmax(g_szQuestion), "%d + %d", a, b)
        }
        case 1: {
            g_iAnswer = a - b
            formatex(g_szQuestion, charsmax(g_szQuestion), "%d - %d", a, b)
        }
        case 2: {
            g_iAnswer = a * b
            formatex(g_szQuestion, charsmax(g_szQuestion), "%d * %d", a, b)
        }
    }

    g_bQuestionAsked = true
    client_print_color(0, 0, "%s ^1Soru geldi! İlk dogru cevap kazanir: ^3%s = ?", lf, g_szQuestion)
}

stock get_random_operator() {
    new difficulty = clamp(get_pcvar_num(g_pDifficulty), 1, 3)
    // difficulty = 1 → sadece + | 2 → +, - | 3 → +, -, *
    return random_num(0, difficulty - 1)
}

stock get_player_name(id) {
    static name[32]
    get_user_name(id, name, charsmax(name))
    return name
}