/**
 * Código inicial del laboratorio: la comisión de cada forma de pago, calculada
 * con una cadena de instanceof. Reescríbanlo con un tipo sealed y un switch.
 */
public final class PaymentFees {
    private PaymentFees() {
    }

    public interface Payment {
        long cents();
    }

    /** Pago en efectivo: sin comisión. */
    public record Cash(long cents) implements Payment {
    }

    /** Pago con tarjeta: 3 % si es de crédito, 1 % si es de débito. */
    public record Card(long cents, boolean credit) implements Payment {
    }

    /** Transferencia bancaria: S/ 1.50 fijos. */
    public record Transfer(long cents, String bank) implements Payment {
    }

    /** Comisión en céntimos. */
    public static long fee(Payment p) {
        if (p instanceof Cash) {
            return 0;
        } else if (p instanceof Card c) {
            return c.credit() ? c.cents() * 3 / 100 : c.cents() / 100;
        } else if (p instanceof Transfer) {
            return 150;
        }
        throw new IllegalArgumentException("forma de pago desconocida: " + p);
    }
}
