import java.time.LocalDate;

// Uji coba model domain dengan tanggal beku agar output selalu sama.
public class LayarDemo {

    public static void main(String[] args) {
        Buku laskar = new Buku("978-602-421-123-4", " Laskar Pelangi ",
                "Andrea Hirata", 2005);
        Buku salinan = new Buku("978-602-421-123-4", "Laskar Pelangi",
                "Andrea Hirata", 2005);

        System.out.println("buku          : " + laskar);
        System.out.println("judul dirapikan: " + laskar.judul().equals("Laskar Pelangi"));
        System.out.println("buku setara   : " + laskar.equals(salinan));

        Anggota budi = new Anggota("A-001", "Budi Santoso",
                "budi@example.com", LocalDate.of(2026, 1, 2));
        System.out.println("anggota       : " + budi);

        Peminjaman pinjaman = new Peminjaman(laskar, budi, LocalDate.of(2026, 1, 5));
        System.out.println("pinjam        : " + pinjaman);
        System.out.println("masih aktif   : " + pinjaman.aktif());

        pinjaman.kembalikan(LocalDate.of(2026, 1, 18));
        System.out.println("sudah kembali : " + pinjaman);
        System.out.println("masih aktif   : " + pinjaman.aktif());

        // Validasi di compact constructor benar-benar aktif.
        try {
            new Buku("978-x", "Buku Uji", "Anonim", -1);
        } catch (IllegalArgumentException e) {
            System.out.println("buku ditolak  : " + e.getMessage());
        }
        try {
            new Anggota("X-9", "Dewi Lestari", "dewi.example.com", LocalDate.of(2026, 1, 5));
        } catch (IllegalArgumentException e) {
            System.out.println("anggota ditolak: " + e.getMessage());
        }
        try {
            pinjaman.kembalikan(LocalDate.of(2026, 1, 4));
        } catch (IllegalArgumentException e) {
            System.out.println("kembali ditolak: " + e.getMessage());
        }
        try {
            pinjaman.kembalikan(LocalDate.of(2026, 1, 20));
        } catch (IllegalStateException e) {
            System.out.println("ganda ditolak : " + e.getMessage());
        }
    }
}
