import java.math.BigDecimal;

/**
 * Kategori transaksi beserta anggaran bulanan opsional.
 * Kategori pemasukan diberi anggaran null karena pemasukan tidak dibatasi plafon.
 */
public record Kategori(String nama, JenisTransaksi jenis, BigDecimal anggaranBulanan) {

    public Kategori {
        if (nama == null || nama.isBlank()) {
            throw new IllegalArgumentException("Nama kategori tidak boleh kosong");
        }
        if (jenis == null) {
            throw new IllegalArgumentException("Jenis kategori wajib terisi");
        }
        if (anggaranBulanan != null && anggaranBulanan.signum() < 0) {
            throw new IllegalArgumentException("Anggaran tidak boleh negatif");
        }
    }

    /** Apakah kategori ini membawa batas pengeluaran bulanan. */
    public boolean beranggaran() {
        return anggaranBulanan != null;
    }
}
