"""Pengelola Daftar Tugas — program manajemen tugas berbasis terminal."""

import storage

NAMA_BERKAS = "tugas.json"


def tampilkan_menu():
    print("=== Pengelola Daftar Tugas ===")
    print("1. Tambah tugas")
    print("2. Daftar tugas")
    print("3. Tandai selesai")
    print("4. Hapus tugas")
    print("5. Keluar")


def nomor_id_baru(daftar_tugas):
    if not daftar_tugas:
        return 1
    return max(tugas["id"] for tugas in daftar_tugas) + 1


def tambah_tugas(daftar_tugas, judul):
    id_baru = nomor_id_baru(daftar_tugas)
    tugas_baru = {"id": id_baru, "judul": judul, "selesai": False}
    daftar_tugas.append(tugas_baru)
    print(f"Tugas \"{judul}\" tersimpan dengan id {id_baru}.")


def tampilkan_daftar(daftar_tugas):
    if not daftar_tugas:
        print("Belum ada tugas.")
        return

    for tugas in daftar_tugas:
        penanda = "[x]" if tugas["selesai"] else "[ ]"
        print(f"{penanda} {tugas['id']}. {tugas['judul']}")


def baca_nomor():
    try:
        return int(input("Nomor tugas: ").strip())
    except ValueError:
        print("Nomor tugas harus berupa angka.")
        return None


def tandai_selesai(daftar_tugas, nomor):
    for tugas in daftar_tugas:
        if tugas["id"] == nomor:
            tugas["selesai"] = True
            print(f"Tugas {nomor} ditandai selesai.")
            return True

    print(f"Tugas dengan nomor {nomor} tidak ditemukan.")
    return False


def hapus_tugas(daftar_tugas, nomor):
    for indeks, tugas in enumerate(daftar_tugas):
        if tugas["id"] == nomor:
            dihapus = daftar_tugas.pop(indeks)
            print(f"Tugas \"{dihapus['judul']}\" dihapus.")
            return True

    print(f"Tugas dengan nomor {nomor} tidak ditemukan.")
    return False


def main():
    daftar_tugas = storage.muat_tugas(NAMA_BERKAS)

    while True:
        tampilkan_menu()
        pilihan = input("Pilihan: ").strip()

        if pilihan == "1":
            judul = input("Judul tugas: ").strip()
            if judul:
                tambah_tugas(daftar_tugas, judul)
                storage.simpan_tugas(daftar_tugas, NAMA_BERKAS)
            else:
                print("Judul tugas tidak boleh kosong.")
        elif pilihan == "2":
            tampilkan_daftar(daftar_tugas)
        elif pilihan == "3":
            nomor = baca_nomor()
            if nomor is not None:
                if tandai_selesai(daftar_tugas, nomor):
                    storage.simpan_tugas(daftar_tugas, NAMA_BERKAS)
        elif pilihan == "4":
            nomor = baca_nomor()
            if nomor is not None:
                if hapus_tugas(daftar_tugas, nomor):
                    storage.simpan_tugas(daftar_tugas, NAMA_BERKAS)
        elif pilihan == "5":
            print("Sampai jumpa!")
            break
        else:
            print("Pilihan tidak dikenal.")


if __name__ == "__main__":
    main()
