import java.time.LocalDate;

/**
 * Representasi satu tugas sebagai resource API.
 * Invarian dasar dijaga compact constructor sehingga objek Tugas tidak pernah
 * berada dalam keadaan tidak sah, apa pun asal datanya (kode atau payload klien).
 */
public record Tugas(int id, String judul, String pemilik, StatusTugas status, LocalDate tenggat) {

    public Tugas {
        if (judul == null || judul.strip().isEmpty()) {
            throw new IllegalArgumentException("judul tidak boleh kosong");
        }
        if (pemilik == null || pemilik.strip().isEmpty()) {
            throw new IllegalArgumentException("pemilik tidak boleh kosong");
        }
        if (tenggat == null) {
            throw new IllegalArgumentException("tenggat tidak boleh kosong");
        }
        judul = judul.strip();
        pemilik = pemilik.strip();
    }

    /** Salinan tugas ini dengan id baru; dipakai repository saat menetapkan id. */
    public Tugas denganId(int idBaru) {
        return new Tugas(idBaru, judul, pemilik, status, tenggat);
    }

    /** Salinan tugas ini dengan status baru; dipakai operasi ubah. */
    public Tugas denganStatus(StatusTugas statusBaru) {
        return new Tugas(id, judul, pemilik, statusBaru, tenggat);
    }
}
