import java.util.List;

public class ProfilLingkungan {

    // Definisi bean kandidat: profil kosong berarti berlaku untuk semua
    // lingkungan (default), meniru anotasi @Profile pada method @Bean.
    record DefinisiBean(String nama, List<String> profil, String url, String keterangan) {
        boolean cocokUntuk(String profilAktif) {
            return profil.isEmpty() || profil.contains(profilAktif);
        }
    }

    private static final List<DefinisiBean> KANDIDAT = List.of(
            new DefinisiBean("dataSourceDev", List.of("dev"),
                    "jdbc:h2:mem:devdb", "basis data in-memory, cepat, data dibuang tiap restart"),
            new DefinisiBean("dataSourceProd", List.of("prod"),
                    "jdbc:postgresql://db.example.com/produksi", "basis data produksi, koneksi terkelola"),
            new DefinisiBean("dataSourceDefault", List.of(),
                    "jdbc:h2:mem:default", "cadangan ketika tidak ada profil yang cocok"));

    public static void main(String[] args) {
        pilihDanCetak("dev");
        pilihDanCetak("prod");
        pilihDanCetak("staging");
    }

    static void pilihDanCetak(String profilAktif) {
        System.out.println("spring.profiles.active = " + profilAktif);

        DefinisiBean terpilih = null;
        for (DefinisiBean k : KANDIDAT) {
            if (!k.profil().isEmpty() && k.cocokUntuk(profilAktif)) {
                terpilih = k;
                break;
            }
        }
        if (terpilih == null) {
            terpilih = KANDIDAT.get(KANDIDAT.size() - 1);
            System.out.println("  tidak ada profil cocok -> definisi default dipakai");
        }

        System.out.println("  bean    : " + terpilih.nama());
        System.out.println("  url     : " + terpilih.url());
        System.out.println("  catatan : " + terpilih.keterangan());
        System.out.println();
    }
}
