import java.util.List;
import java.util.function.Function;

public class LaporanFleksibel {

    record Penjualan(String barang, int kuantitas, int total) {}

    static List<Penjualan> data = List.of(
            new Penjualan("Kopi", 30, 750000),
            new Penjualan("Teh", 12, 144000));

    // Template: alur laporan tetap, format baris disuntik sebagai behavior
    static void cetakLaporan(String judul, Function<Penjualan, String> formatBaris) {
        System.out.println("=== " + judul + " ===");
        for (Penjualan p : data) {
            System.out.println(formatBaris.apply(p));
        }
        System.out.println("--- selesai ---");
    }

    public static void main(String[] args) {
        cetakLaporan("Ringkas", p -> p.barang() + " x" + p.kuantitas());
        cetakLaporan("Rupiah", p -> String.format("%-6s Rp%,d", p.barang(), p.total()));
    }
}
