package io.mifos.individuallending.internal.service.costcomponent;

import io.mifos.individuallending.internal.service.DataContextOfAction;
import io.mifos.portfolio.api.v1.domain.ChargeDefinition;
import io.mifos.portfolio.api.v1.domain.CostComponent;

import javax.annotation.Nonnull;
import java.math.BigDecimal;
import java.time.LocalDate;

public interface PaymentBuilderService {
  static CostComponent getAccruedCostComponentToApply(
      final RunningBalances runningBalances,
      final DataContextOfAction dataContextOfAction,
      final LocalDate startOfTerm,
      final ChargeDefinition chargeDefinition) {
    final CostComponent ret = new CostComponent();
    ret.setChargeIdentifier(chargeDefinition.getIdentifier());
    ret.setAmount(runningBalances.getAccruedBalanceForCharge(dataContextOfAction, startOfTerm, chargeDefinition));
    return ret;
  }

  PaymentBuilder getPaymentBuilder(
      final @Nonnull DataContextOfAction dataContextOfAction,
      final BigDecimal forPaymentSize,
      final LocalDate forDate,
      final @Nonnull RunningBalances runningBalances);
}
