package org.springframework.prospring.ticket.service.payment;

import org.springframework.prospring.ticket.service.*;

/**
 * To jest symulowana implementacja interfejsu mechanizmu sprawdzającego poprawność karty kredytowej.
 * W losowy sposób akceptuje lub odrzuca karty i generuje losowe kodu uwierzytelniające.
 */
public class DummyPaymentProcessor implements PaymentProcessor {

    // znaki z jakich będą generowane kody uwierzytelniające.
    private final static char[] AUTH_CHARS = {
        'A', 'B', 'C', 'D', 'Y', 'Z', 'Q', 'T', 'J', 'R', 'W', 'V',
        '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'
    };

    /**
     * W losowy sposób akceptuje lub odrzuca dane żądanie zakupu.
     * @see PaymentProcessor#validate(org.springframework.prospring.ticket.service.PurchaseRequest)
     */
    public void validate(PurchaseRequest purchaseRequest) throws CreditCardValidationException {
        double randomNumber = Math.random() * 1000;
        if (randomNumber < 200) {
            throw new CreditCardValidationException("Numer karty kredytowej nie jest prawidłowy.");
        }
    }

    /**
     * Generuje losowy kod uwierzytelniający.
     * @see PaymentProcessor#process(org.springframework.prospring.ticket.service.PurchaseRequest)
     */
    public String process(PurchaseRequest purchaseRequest) throws PaymentException {
        StringBuffer code = new StringBuffer();
        for (int i=0; i<10; i++) {
            int charIndex = (int)(Math.random() * AUTH_CHARS.length);
            code.append(AUTH_CHARS[charIndex]);
        }
        return code.toString();
    }

}
