/* main.c -- titik masuk game tebak angka.
 *
 * Memisahkan logika (game.c) dari I/O (main.c) supaya game.c dapat diuji
 * tanpa menyimulasikan keyboard.
 */

#include "game.h"

#include <stdio.h>
#include <stdlib.h>

/* Membaca satu integer dari stdin.
 * Mengembalikan 1 bila berhasil, 0 bila input tidak terurai, -1 bila EOF.
 */
static int baca_int(const char *prompt, int *out) {
    char buffer[64];
    printf("%s", prompt);
    if (fgets(buffer, sizeof(buffer), stdin) == 0) return -1;
    char *sisa = 0;
    long nilai = strtol(buffer, &sisa, 10);
    if (sisa == buffer) return 0;
    *out = (int)nilai;
    return 1;
}

static const char *status_pesan(TebakStatus s) {
    switch (s) {
        case TEBAK_BENAR:  return "Tebakan benar!";
        case TEBAK_KECIL:  return "Tebakan terlalu kecil.";
        case TEBAK_BESAR:  return "Tebakan terlalu besar.";
        case TEBAK_INVALID:return "Tebakan di luar rentang yang sah.";
        case TEBAK_HABIS:  return "Ronde sudah habis.";
        default:           return "Status tidak dikenal.";
    }
}

int main(void) {
    game_init();
    int rahasia = game_angka_rahasia();

    printf("=== Game Tebak Angka ===\n");
    printf("Saya menyimpan angka antara %s.\n", game_rentang_teks());
    printf("Anda punya %d ronde untuk menebak.\n\n", GAME_MAKS_RONDE);

    int menang = 0;
    int ronde_menang = 0;

    for (int ronde = 1; ronde <= GAME_MAKS_RONDE; ronde++) {
        int tebak = 0;
        int hasil_baca = baca_int("Tebakan Anda: ", &tebak);
        if (hasil_baca == -1) {
            printf("\nInput berakhir (EOF). Berhenti.\n");
            break;
        }
        if (hasil_baca == 0) {
            printf("Input tidak valid. Coba lagi.\n");
            ronde--;   /* jangan pakai ronde untuk input invalid */
            continue;
        }

        TebakStatus s = game_periksa(tebak, rahasia, ronde);
        printf("Ronde %d: %s\n", ronde, status_pesan(s));

        if (s == TEBAK_INVALID) {
            ronde--;   /* input invalid tidak mengurangi ronde */
            continue;
        }
        if (s == TEBAK_BENAR) {
            menang = 1;
            ronde_menang = ronde;
            break;
        }
    }

    if (menang) {
        int skor = game_hitung_skor_aman(ronde_menang);
        printf("\nSelamat! Angka rahasia: %d\n", rahasia);
        printf("Anda menang di ronde %d dengan skor %d.\n", ronde_menang, skor);
    } else {
        printf("\nMaaf, ronde habis. Angka rahasia: %d\n", rahasia);
    }
    return 0;
}
