import java.util.List;

public class ContohSiklusContainer {

    // ---- tiruan container: mahal untuk dimulai dan dihentikan ----

    static int jumlahDimulai = 0;

    static final class ContainerTiruan implements AutoCloseable {

        private final String nama;

        ContainerTiruan(String nama) {
            this.nama = nama;
            jumlahDimulai++;
            System.out.println("  [docker] " + nama + " berjalan");
        }

        String urlJdbc() {
            return "jdbc:tiruan://" + nama + ":3306/uji";
        }

        @Override
        public void close() {
            System.out.println("  [docker] " + nama + " berhenti");
        }
    }

    static void jalankanTest(ContainerTiruan container, String namaTest) {
        System.out.println("  [test] " + namaTest + " -> " + container.urlJdbc());
    }

    public static void main(String[] args) {
        System.out.println("mode 1: satu container untuk seluruh class");
        try (ContainerTiruan bersama = new ContainerTiruan("db-bersama")) {
            for (String test : List.of("simpanTest", "cariTest", "hapusTest")) {
                jalankanTest(bersama, test);
            }
        }

        System.out.println("mode 2: container baru untuk tiap test");
        for (String test : List.of("simpanTest", "cariTest", "hapusTest")) {
            try (ContainerTiruan segar = new ContainerTiruan("db-" + test.toLowerCase())) {
                jalankanTest(segar, test);
            }
        }

        System.out.println("total container dimulai: " + jumlahDimulai);
    }
}
