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

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

/**
 * Reprezentuje moduł obsługujący płatności kartą kredytową.
 */
public interface PaymentProcessor {

    /**
     * Weryfikuje szczegóły żądania zakupu dla danej płatności.
     * @param purchaseRequest Żądanie zakupu.
     * @throws CreditCardValidationException Zgłaszany gdy dane karty kredytowej dla tej płatności nie są prawidłowe.
     */
    public void validate(PurchaseRequest purchaseRequest) throws CreditCardValidationException;

    /**
     * Przetwarza płatność przy wykorzystaniu zewnętrznego systemu obsługi płatności.
     * @param purchaseRequest Żądanie zakupu.
     * @return Kod potwierdzenia obsługi.
     */
    public String process(PurchaseRequest purchaseRequest) throws PaymentException;

}
