/**
 * Kebijakan percobaan ulang: batas percobaan dan backoff eksponensial dalam
 * "unit biaya simulasi" — bukan sleep nyata — agar keluaran tetap deterministik.
 */
public record KebijakanRetry(int percobaanMaks, long unitTungguDasar) {

    /** Kebijakan baku: maksimal 3 percobaan, tunggu dasar 20 unit. */
    public static KebijakanRetry baku() {
        return new KebijakanRetry(3, 20);
    }

    /** Panjang tunggu setelah percobaan ke-N gagal: 20, 40, 80, ... unit. */
    public long unitTunggu(int percobaanKe) {
        return unitTungguDasar << (percobaanKe - 1);
    }
}
