"""Kalkulator Terminal - validasi input.

Bagian 3: validasi pilihan menu, angka, dan jawaban y/t
dengan pola coba-ulang hingga input valid.
"""


def tampilkan_menu():
    """Cetak daftar operasi yang tersedia."""
    print("=== Kalkulator Terminal ===")
    print("1. Tambah")
    print("2. Kurang")
    print("3. Kali")
    print("4. Bagi")
    print("5. Keluar")


def baca_pilihan():
    """Baca nomor operasi; ulangi sampai pengguna memasukkan 1-5."""
    while True:
        pilihan = input("Pilih operasi (1-5): ").strip()
        if pilihan in ("1", "2", "3", "4", "5"):
            return pilihan
        print(f"Pilihan '{pilihan}' tidak dikenal. Masukkan angka 1-5.")


def baca_angka(label):
    """Baca satu angka; ulangi sampai input dapat dikonversi menjadi float."""
    while True:
        teks = input(f"{label}: ").strip()
        try:
            return float(teks)
        except ValueError:
            print(f"'{teks}' bukan angka yang valid. Coba lagi.")


def tanya_lagi():
    """Tanyakan apakah pengguna ingin menghitung lagi; terima hanya y atau t."""
    while True:
        jawaban = input("Hitung lagi? (y/t): ").strip().lower()
        if jawaban in ("y", "t"):
            return jawaban == "y"
        print("Jawaban harus 'y' atau 't'.")


def tambah(a, b):
    """Kembalikan hasil a + b."""
    return a + b


def kurang(a, b):
    """Kembalikan hasil a - b."""
    return a - b


def kali(a, b):
    """Kembalikan hasil a * b."""
    return a * b


def bagi(a, b):
    """Kembalikan hasil a / b, atau None bila pembagi bernilai nol."""
    if b == 0:
        print("Error: pembagian dengan nol tidak diperbolehkan.")
        return None
    return a / b


OPERASI = {
    "1": ("+", tambah),
    "2": ("-", kurang),
    "3": ("*", kali),
    "4": ("/", bagi),
}


def jalankan():
    """Jalankan loop utama kalkulator."""
    while True:
        tampilkan_menu()
        pilihan = baca_pilihan()

        if pilihan == "5":
            break

        simbol, fungsi = OPERASI[pilihan]
        a = baca_angka("Angka pertama")
        b = baca_angka("Angka kedua")

        hasil = fungsi(a, b)

        if hasil is not None:
            print(f"Hasil: {a:g} {simbol} {b:g} = {hasil:g}")

        if not tanya_lagi():
            break

    print("Terima kasih telah menggunakan Kalkulator Terminal.")


if __name__ == "__main__":
    jalankan()
