package com.bookshop.creational.simplefactory;

import java.math.BigDecimal;

/**
 * The simple factory: the only place in the codebase that knows which concrete
 * processor class backs each {@link PaymentMethod}.
 */
public final class PaymentProcessors {

    private PaymentProcessors() {
    }

    public static PaymentProcessor forMethod(PaymentMethod method) {
        return switch (method) {
            case CARD -> new CardProcessor();
            case PAYPAL -> new PayPalProcessor();
            case GIFT_CARD -> new GiftCardProcessor();
        };
    }

    private static final class CardProcessor implements PaymentProcessor {
        @Override
        public PaymentReceipt process(BigDecimal amount) {
            return new PaymentReceipt("card", amount);
        }
    }

    private static final class PayPalProcessor implements PaymentProcessor {
        @Override
        public PaymentReceipt process(BigDecimal amount) {
            return new PaymentReceipt("paypal", amount);
        }
    }

    private static final class GiftCardProcessor implements PaymentProcessor {
        @Override
        public PaymentReceipt process(BigDecimal amount) {
            return new PaymentReceipt("gift-card", amount);
        }
    }
}
