PaymentCalculation.java

package uk.gov.dhsc.htbhf.claimant.service.payments;

import lombok.Builder;
import lombok.Value;
import uk.gov.dhsc.htbhf.claimant.entity.PaymentCycleStatus;

import java.time.LocalDateTime;

import static uk.gov.dhsc.htbhf.claimant.entity.PaymentCycleStatus.BALANCE_TOO_HIGH_FOR_PAYMENT;
import static uk.gov.dhsc.htbhf.claimant.entity.PaymentCycleStatus.FULL_PAYMENT_MADE;

/**
 * The result of a payment calculation from {@link PaymentCalculator}.
 */
@Value
@Builder
public class PaymentCalculation {

    private PaymentCycleStatus paymentCycleStatus;
    private int paymentAmount;
    private int availableBalanceInPence;
    private LocalDateTime balanceTimestamp;

    public static PaymentCalculation aFullPaymentCalculationWithZeroBalance(int paymentAmount) {
        return PaymentCalculation.builder()
                .paymentAmount(paymentAmount)
                .paymentCycleStatus(FULL_PAYMENT_MADE)
                .balanceTimestamp(LocalDateTime.now())
                .availableBalanceInPence(0)
                .build();
    }

    public static PaymentCalculation aBalanceTooHighPaymentCalculation(int availableBalanceInPence) {
        return PaymentCalculation.builder()
                .availableBalanceInPence(availableBalanceInPence)
                .balanceTimestamp(LocalDateTime.now())
                .paymentCycleStatus(BALANCE_TOO_HIGH_FOR_PAYMENT)
                .paymentAmount(0)
                .build();
    }

}