package br.com.caelum.stella.gateway.pagseguro;
import java.math.BigDecimal;
import java.util.Collection;
import br.com.caelum.stella.gateway.core.BigDecimalFormatter;
public class PagSeguroCheckout {
private static final String TIPO_POST = "CP";
private String tipo;
private PagSeguroMoeda moeda;
private Collection<PagSeguroItem> itens;
private String urlBotaoSubmit;
private String refTransacao;
private PagSeguroTipoFrete tipoFrete;
private PagSeguroDadosCliente dadosCliente;
/**
* Usado de forma controlada para gerar o PagSeguroAutorizacaoReturn
* @param refTransacao
* @param tipoFrete
* @param dadosCliente
* @param itens
*/
PagSeguroCheckout(String refTransacao,PagSeguroTipoFrete tipoFrete,PagSeguroDadosCliente dadosCliente,Collection<PagSeguroItem> itens){
this(null,itens,null,refTransacao,tipoFrete,dadosCliente);
}
private PagSeguroCheckout(PagSeguroMoeda moeda,
Collection<PagSeguroItem> itens, String urlBotaoSubmit,
String refTransacao, PagSeguroTipoFrete tipoFrete,
PagSeguroDadosCliente dadosCliente) {
super();
this.tipo = TIPO_POST;
this.moeda = moeda;
this.itens = itens;
this.urlBotaoSubmit = urlBotaoSubmit;
this.refTransacao = refTransacao;
this.tipoFrete = tipoFrete;
this.dadosCliente = dadosCliente;
}
public static PagSeguroCheckout newCheckoutComFreteParaUsuarioDecidir(
PagSeguroMoeda moeda, Collection<PagSeguroItem> itens,
String urlBotaoSubmit, String refTransacao) {
return new PagSeguroCheckout(moeda, itens, urlBotaoSubmit,
refTransacao, PagSeguroTipoFrete.USUARIO_DECIDE, null);
}
public static PagSeguroCheckout newCheckoutComFrete(
PagSeguroMoeda moeda, Collection<PagSeguroItem> itens,
String urlBotaoSubmit, String refTransacao,
PagSeguroTipoFrete tipoFrete) {
return new PagSeguroCheckout(moeda, itens, urlBotaoSubmit,
refTransacao, tipoFrete, null);
}
public static PagSeguroCheckout newCheckoutComFreteParaUsuarioDecidirEComDadosDoUsuario(
PagSeguroMoeda moeda, Collection<PagSeguroItem> itens,
String urlBotaoSubmit, String refTransacao,
PagSeguroDadosCliente dadosCliente) {
return new PagSeguroCheckout(moeda, itens, urlBotaoSubmit,
refTransacao, PagSeguroTipoFrete.USUARIO_DECIDE, dadosCliente);
}
public static PagSeguroCheckout newCheckoutComFreteEComDadosDoUsuario(
PagSeguroMoeda moeda, Collection<PagSeguroItem> itens,
String urlBotaoSubmit, String refTransacao,
PagSeguroTipoFrete tipoFrete, PagSeguroDadosCliente dadosCliente) {
return new PagSeguroCheckout(moeda, itens, urlBotaoSubmit,
refTransacao, tipoFrete, dadosCliente);
}
public String getTipo() {
return tipo;
}
public PagSeguroMoeda getMoeda() {
return moeda;
}
public Collection<PagSeguroItem> getItens() {
return itens;
}
public String getUrlBotaoSubmit() {
return urlBotaoSubmit;
}
public String getRefTransacao() {
return refTransacao;
}
public PagSeguroTipoFrete getTipoFrete() {
return tipoFrete;
}
public PagSeguroCheckout adicionaItem(PagSeguroItem item) {
itens.add(item);
return this;
}
public String getBairro() {
return dadosCliente.getBairro();
}
public String getCep() {
return dadosCliente.getCep();
}
public String getCidade() {
return dadosCliente.getCidade();
}
public String getComplemento() {
return dadosCliente.getComplemento();
}
public String getDdd() {
return dadosCliente.getDdd();
}
public String getEmail() {
return dadosCliente.getEmail();
}
public String getEndereco() {
return dadosCliente.getEndereco();
}
public String getEstado() {
return dadosCliente.getEstado();
}
public String getNome() {
return dadosCliente.getNome();
}
public String getNumero() {
return dadosCliente.getNumero();
}
public String getTelefone() {
return dadosCliente.getTelefone();
}
public String getPais() {
return dadosCliente.getPais();
}
public boolean hasDadosDoCliente(){
return dadosCliente!=null;
}
public BigDecimal getValorTotalItens(){
BigDecimal total = BigDecimal.ZERO;
for(PagSeguroItem item : itens){
total = total.add(item.getValor());
}
return new BigDecimalFormatter().normalizaBigDecimal(total);
}
public BigDecimal getValorTotalFrete(){
BigDecimal total = BigDecimal.ZERO;
for(PagSeguroItem item : itens){
total = total.add(item.getFrete());
}
return new BigDecimalFormatter().normalizaBigDecimal(total);
}
}