/* game.c -- implementasi logika game tebak angka. */

#include "game.h"

#include <stdlib.h>
#include <time.h>

void game_init(void) {
    /* Seed generator dengan waktu saat ini. */
    srand((unsigned int)time(NULL));
}

int game_angka_rahasia(void) {
    /* rand() % N menghasilkan nilai [0, N-1]; kita geser ke rentang yang diinginkan. */
    int rentang = GAME_TEBAK_MAKS - GAME_TEBAK_MIN + 1;
    return GAME_TEBAK_MIN + (rand() % rentang);
}

TebakStatus game_periksa(int tebak, int rahasia, int ronde_kini) {
    if (ronde_kini > GAME_MAKS_RONDE) {
        return TEBAK_HABIS;
    }
    if (tebak < GAME_TEBAK_MIN || tebak > GAME_TEBAK_MAKS) {
        return TEBAK_INVALID;
    }
    if (tebak == rahasia) {
        return TEBAK_BENAR;
    }
    if (tebak < rahasia) {
        return TEBAK_KECIL;
    }
    return TEBAK_BESAR;
}

int game_hitung_skor(int ronde_menang) {
    /* Setiap ronde setelah ronde 1 mengurangi 10 poin. */
    int pengurangan = (ronde_menang - 1) * 10;
    int skor = GAME_SKOR_AWAL - pengurangan;
    if (skor < 0) skor = 0;
    return skor;
}

int game_hitung_skor_aman(int ronde_menang) {
    /* Versi yang menolak input tidak valid. */
    if (ronde_menang < 1 || ronde_menang > GAME_MAKS_RONDE) {
        return 0;
    }
    return game_hitung_skor(ronde_menang);
}

const char *game_rentang_teks(void) {
    static char buffer[32];
    snprintf(buffer, sizeof(buffer), "%d sampai %d",
             GAME_TEBAK_MIN, GAME_TEBAK_MAKS);
    return buffer;
}
