package br.com.caelum.stella.gateway.redecard;
import br.com.caelum.stella.gateway.core.InvalidCheckoutException;
public class RedecardFormaPagamento {
private RedecardTipoTransacao tipoTransacao;
private int numeroDeParcelas;
/**
*
* @param tipoTransacao
* @param numeroDeParcelas
* @throws InvalidCheckoutException
* caso a combinação tipoTransacao e numeroDeParcelas esteja
* errada.
*/
public RedecardFormaPagamento(RedecardTipoTransacao tipoTransacao,
int numeroDeParcelas) {
if (numeroDeParcelas < 0) {
throw new InvalidCheckoutException(
"O número de parcelas não pode ser igual ou menor que 0");
} else {
if (tipoTransacao.equals(RedecardTipoTransacao.A_VISTA)) {
if (numeroDeParcelas > 0) {
throw new InvalidCheckoutException(
"Para transação a vista o número de parcelas deve ser igual a 0");
}
} else {
if (numeroDeParcelas == 0) {
throw new InvalidCheckoutException("Para transações com "
+ numeroDeParcelas
+ " parcela(s), use o tipo de transação a vista");
}
}
this.tipoTransacao = tipoTransacao;
this.numeroDeParcelas = numeroDeParcelas;
}
}
/**
*
* @return Parcelamento já configurado para transacao a vista.
*/
public static RedecardFormaPagamento newPagamentoAVista() {
return new RedecardFormaPagamento(RedecardTipoTransacao.A_VISTA, 0);
}
public static RedecardFormaPagamento newPagamentoParceladoJurosLojista(
int numeroDeParcelas) {
return new RedecardFormaPagamento(
RedecardTipoTransacao.PARCELADO_JUROS_LOJISTA, numeroDeParcelas);
}
public static RedecardFormaPagamento newPagamentoParceladoJurosEmissor(
int numeroDeParcelas) {
return new RedecardFormaPagamento(
RedecardTipoTransacao.PARCELADO_JUROS_EMISSOR, numeroDeParcelas);
}
public RedecardTipoTransacao getTipoTransacao() {
return tipoTransacao;
}
public int getNumeroDeParcelas() {
return numeroDeParcelas;
}
public String getNumeroDeParcelasComNoMinimoDoisDigitos() {
return String.format("%02d", numeroDeParcelas);
}
}