import java.time.LocalDate;
import java.util.Map;

/** Bagian 1: memperagakan format pesan JSON untuk resource tugas. */
public class DemoPesan {

    public static void main(String[] args) {
        Tugas tugas = new Tugas(1, "Belajar desain REST API", "Budi",
                StatusTugas.TODO, LocalDate.of(2026, 1, 20));

        // Respons untuk GET /api/tugas/1
        System.out.println("Respons GET /api/tugas/1 (200):");
        System.out.println(JsonMini.tugas(tugas));

        // Payload yang dikirim klien pada POST /api/tugas
        String permintaan = "{\"judul\":\"Tulis dokumentasi API\","
                + "\"pemilik\":\"Siti\",\"tenggat\":\"2026-02-01\"}";
        Map<String, Object> payload = JsonMini.parseObjek(permintaan);
        System.out.println();
        System.out.println("Payload POST /api/tugas setelah diparsing:");
        System.out.println("judul   = " + payload.get("judul"));
        System.out.println("pemilik = " + payload.get("pemilik"));
        System.out.println("tenggat = " + payload.get("tenggat"));

        // Server menyimpan payload, lalu menjawab dengan tugas yang sudah ber-id
        Tugas baru = new Tugas(2, (String) payload.get("judul"), (String) payload.get("pemilik"),
                StatusTugas.TODO, LocalDate.parse((String) payload.get("tenggat")));
        System.out.println();
        System.out.println("Respons POST /api/tugas (201):");
        System.out.println(JsonMini.tugas(baru));

        // Amplop error yang sama untuk semua respons gagal
        System.out.println();
        System.out.println("Respons GET /api/tugas/9 (404):");
        System.out.println(JsonMini.error("tugas dengan id 9 tidak ditemukan"));

        // Parser juga mengenali angka, boolean, null, dan angka pecahan
        Map<String, Object> campuran = JsonMini.parseObjek(
                "{\"versi\":2,\"stabil\":true,\"catatan\":null,\"skor\":4.5}");
        System.out.println();
        System.out.println("Parser nilai campuran : " + campuran);

        // Judul yang memuat kutip ganda dan backslash wajib di-escape
        String judulAneh = "Belajar \"escape\" di \\ JSON";
        System.out.println("Judul di-escape       : " + JsonMini.string(judulAneh));
    }
}
