import java.util.ArrayList;
import java.util.List;

/** Neraca trade-offs: skor kesiapan microservices untuk dua profil proyek. */
public class NeracaMikroservis {

    /** Satu faktor keputusan dengan skor 0-3 per profil (3 = paling mendukung pemecahan). */
    record Faktor(String nama, int skorProfilA, int skorProfilB) {}

    static final List<Faktor> FAKTOR = List.of(
            new Faktor("jumlah tim development yang terpisah", 0, 3),
            new Faktor("kebutuhan rilis mandiri per area", 1, 3),
            new Faktor("kebutuhan skala/teknologi berbeda per bagian", 1, 2),
            new Faktor("kebutuhan blast radius kegagalan terkurung", 1, 3),
            new Faktor("kematangan CI/CD dan observability tim", 2, 3),
            new Faktor("keragaman domain yang perlu model sendiri", 1, 3));

    public static void main(String[] args) {
        System.out.println("== Neraca trade-offs (skala 0-3; 3 = paling mendukung pemecahan) ==");
        System.out.println("profil-A = startup 4 orang, satu produk");
        System.out.println("profil-B = perusahaan 3 tim lintas domain");
        System.out.println();

        int totalA = 0;
        int totalB = 0;
        int nomor = 1;
        for (Faktor f : FAKTOR) {
            System.out.println("  " + nomor + ". " + f.nama()
                    + " : A=" + f.skorProfilA() + ", B=" + f.skorProfilB());
            totalA += f.skorProfilA();
            totalB += f.skorProfilB();
            nomor++;
        }

        int maksimum = FAKTOR.size() * 3;
        System.out.println();
        System.out.println("== Hasil neraca ==");
        System.out.println("profil-A: total " + totalA + "/" + maksimum
                + " -> " + rekomendasi(totalA, maksimum));
        System.out.println("profil-B: total " + totalB + "/" + maksimum
                + " -> " + rekomendasi(totalB, maksimum));
    }

    /** Tiga zona keputusan berdasarkan rasio skor terhadap maksimum. */
    static String rekomendasi(int total, int maksimum) {
        int rasio = total * 100 / maksimum;
        if (rasio >= 60) {
            return "microservices masuk akal (" + rasio + " persen)";
        }
        if (rasio >= 40) {
            return "monolith modular, siapkan batas domain (" + rasio + " persen)";
        }
        return "tetap monolith, fokus ke produk (" + rasio + " persen)";
    }
}
