import java.util.List;

public class SaranArsitektur {
    public static void main(String[] args) {
        // Empat profil proyek dengan kendala yang berbeda
        List<Proyek> daftarProyek = List.of(
                new Proyek("Aplikasi Kasir", 3, 2, false, false),
                new Proyek("Modul Penjualan", 12, 4, false, true),
                new Proyek("Portal Berita", 20, 3, false, false),
                new Proyek("Platform Olahraga", 40, 9, true, true));

        for (Proyek proyek : daftarProyek) {
            System.out.println(proyek.nama() + " -> " + rekomendasi(proyek));
        }
    }

    // Tabel keputusan dalam bentuk kode: aturan eksplisit dan dapat diuji
    static String rekomendasi(Proyek proyek) {
        if (proyek.tim() <= 8 && proyek.konteks() <= 3) {
            return "monolit modular: satu deployable, batasi modul lewat package";
        }
        if (proyek.tim() <= 15 && proyek.konteks() <= 5 && !proyek.slaKetat()) {
            return "monolit modular + hexagonal: port-adapter siap diekstrak";
        }
        if (proyek.ekstraksi() && proyek.konteks() > 5) {
            return "layanan per bounded context, ekstraksi satu per satu";
        }
        return "monolit dengan observability; tunda pemecahan sampai bukti muncul";
    }
}

record Proyek(String nama, int tim, int konteks, boolean slaKetat, boolean ekstraksi) {
}
