import java.util.LinkedHashMap;
import java.util.Map;

/** Menyusun rencana kemasan: manifest, jlink, dan jpackage per OS. */
public class RencanaKemasan {
    public static void main(String[] args) {
        Map<String, String> aplikasi = new LinkedHashMap<>();
        aplikasi.put("nama", "aplikasi-siswa");
        aplikasi.put("versi", "1.0.0");
        aplikasi.put("kelasUtama", "HaloDuniaSwing");
        aplikasi.put("modul", "aplikasi.siswa");

        System.out.println("== berkas MANIFEST.MF (jar biasa) ==");
        System.out.println("Main-Class: " + aplikasi.get("kelasUtama"));
        System.out.println("Implementation-Title: " + aplikasi.get("nama"));
        System.out.println("Implementation-Version: " + aplikasi.get("versi"));

        System.out.println();
        System.out.println("== citra runtime jlink (modul java.desktop disertakan) ==");
        System.out.println("jlink --add-modules " + aplikasi.get("modul")
                + " --strip-debug --no-header-files --no-man-pages"
                + " --compress zip-6 --output runtime-ku");

        System.out.println();
        System.out.println("== perintah jpackage per platform ==");
        Map<String, String> tipePemasang = new LinkedHashMap<>();
        tipePemasang.put("linux", "deb");
        tipePemasang.put("windows", "msi");
        tipePemasang.put("macos", "dmg");

        for (Map.Entry<String, String> e : tipePemasang.entrySet()) {
            System.out.printf("jpackage --type %s --name %s --version %s%n",
                    e.getValue(), aplikasi.get("nama"), aplikasi.get("versi"));
            System.out.printf("          --input target/ --main-jar %s.jar%n",
                    aplikasi.get("nama"));
            System.out.printf("          --main-class %s --runtime-image runtime-ku   [%s]%n",
                    aplikasi.get("kelasUtama"), e.getKey());
        }
    }
}
