"""Modul penyimpanan daftar tugas ke berkas JSON."""

import json
import os


def tugas_sah(item: object) -> bool:
    """Periksa apakah satu record memiliki struktur tugas yang benar."""
    if not isinstance(item, dict):
        return False

    id_sah = isinstance(item.get("id"), int) and not isinstance(item.get("id"), bool)
    judul_sah = isinstance(item.get("judul"), str)
    selesai_sah = isinstance(item.get("selesai"), bool)
    return id_sah and judul_sah and selesai_sah


def saring_tugas(data: object) -> list[dict]:
    """Ambil hanya record yang sah dari hasil parsing JSON."""
    if not isinstance(data, list):
        return []
    return [item for item in data if tugas_sah(item)]


def simpan_tugas(daftar_tugas: list[dict], nama_file: str) -> None:
    """Simpan seluruh daftar tugas ke berkas JSON."""
    with open(nama_file, "w", encoding="utf-8") as berkas:
        json.dump(daftar_tugas, berkas, ensure_ascii=False, indent=2)


def muat_tugas(nama_file: str) -> list[dict]:
    """Muat daftar tugas dari berkas JSON."""
    try:
        with open(nama_file, "r", encoding="utf-8") as berkas:
            data = json.load(berkas)
    except FileNotFoundError:
        return []
    except json.JSONDecodeError:
        print(f"Berkas {nama_file} tidak berisi JSON yang valid.")
        os.replace(nama_file, nama_file + ".bak")
        print(f"Berkas yang rusak dipindah ke {nama_file}.bak.")
        print("Program memulai dengan daftar tugas kosong.")
        return []

    return saring_tugas(data)
