import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.UnaryOperator;

public class HargaFinal {
    public static void main(String[] args) {
        UnaryOperator<Double> tambahPajak = harga -> harga * 1.11;
        Function<Double, String> formatRupiah = harga -> String.format("Rp%,.0f", harga);
        BiFunction<Double, Double, Double> terapkanDiskon =
                (harga, persen) -> harga * (1 - persen);

        // Rantai transformasi: pajak dulu, lalu format
        Function<Double, String> tagihan = tambahPajak.andThen(formatRupiah);
        System.out.println("Tanpa diskon : " + tagihan.apply(200000.0));

        // BiFunction menyala lebih dulu, hasilnya masuk ke rantai Function
        double setelahDiskon = terapkanDiskon.apply(200000.0, 0.2);
        System.out.println("Diskon 20%   : " + tagihan.apply(setelahDiskon));
    }
}
