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

public class RantaiValidasi {

    // Simpul 1: menolak teks kosong
    static UnaryOperator<String> wajibTerisi = teks -> {
        if (teks.isBlank()) {
            throw new IllegalArgumentException("wajib terisi");
        }
        return teks;
    };

    // Simpul 2: menolak teks yang memuat angka
    static UnaryOperator<String> tanpaAngka = teks -> {
        if (teks.matches(".*\\d.*")) {
            throw new IllegalArgumentException("tidak boleh berangka: " + teks);
        }
        return teks;
    };

    // Simpul 3: memotong teks melebihi 20 karakter
    static UnaryOperator<String> maksimal20 = teks ->
            teks.substring(0, Math.min(teks.length(), 20)).trim();

    public static void main(String[] args) {
        Function<String, String> rantai = wajibTerisi
                .andThen(tanpaAngka)
                .andThen(maksimal20);

        List<String> masukan = List.of(
                "Budi Santoso",
                "",
                "Siti2026",
                "Dewi Lestari dengan nama panjang sekali");

        for (String teks : masukan) {
            try {
                System.out.println("OK    : [" + rantai.apply(teks) + "]");
            } catch (IllegalArgumentException e) {
                System.out.println("TOLAK : " + e.getMessage());
            }
        }
    }
}
