package com.rjconsultores.ventaboletos.vo.comissao;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;

import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.brazilutils.text.RealToWords;
import org.zkoss.util.resource.Labels;

import com.rjconsultores.ventaboletos.entidad.Comissao;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.DocumentosUtil;
import com.rjconsultores.ventaboletos.utilerias.LocaleUtil;
import com.rjconsultores.ventaboletos.utilerias.MoneyHelper;

public class HistoricoComissao extends Comissao {
	
	private static final Logger log = LogManager.getLogger(HistoricoComissao.class);

	private static final long serialVersionUID = 1L;
	
	private static final NumberFormat NF = NumberFormat.getCurrencyInstance(LocaleUtil.getLocale());

	private String pagamento;
	private String usuarioPagamento;
	private String usuarioLancamento;
	private String nombpuntoventa;
	private String numpuntoventa;
	private String sigla;
	private String nome;
	private String banco;
	private String conta;
	private String agencia;
	private String cidade;
	private String nombempresa;
	private String cnpj;
	private String descCorreo;
	private String razonsocial;
	private String cnpjPuntoventa;
	
	public HistoricoComissao() {
		super();
		setComissaoBpr(BigDecimal.ZERO);
		setReceitaExcessobagagem(BigDecimal.ZERO);
		setReceitaSeguroopcional(BigDecimal.ZERO);
		setReceitaSeguro(BigDecimal.ZERO);
		setReceitaOutros(BigDecimal.ZERO);
		setDescontosFixos(BigDecimal.ZERO);
		setDescontosEventuais(BigDecimal.ZERO);
		setRoyaties(BigDecimal.ZERO);
		setIssRetido(BigDecimal.ZERO);
		setBonificacaoMetas(BigDecimal.ZERO);
		setEntregasPassagem(BigDecimal.ZERO);
		setReceitaBPR(BigDecimal.ZERO);
		setDevolvidos(BigDecimal.ZERO);
		setReceitaGAP(BigDecimal.ZERO);
	}

	public String getPagamento() {
		return pagamento;
	}

	public void setPagamento(String pagamento) {
		this.pagamento = pagamento;
	}

	public String getUsuarioPagamento() {
		return usuarioPagamento;
	}

	public void setUsuarioPagamento(String usuarioPagamento) {
		this.usuarioPagamento = usuarioPagamento;
	}

	public String getUsuarioLancamento() {
		return usuarioLancamento;
	}

	public void setUsuarioLancamento(String usuarioLancamento) {
		this.usuarioLancamento = usuarioLancamento;
	}

	public String getNombpuntoventa() {
		return nombpuntoventa;
	}

	public void setNombpuntoventa(String nombpuntoventa) {
		this.nombpuntoventa = nombpuntoventa;
	}

	public String getNumpuntoventa() {
		return numpuntoventa;
	}

	public void setNumpuntoventa(String numpuntoventa) {
		this.numpuntoventa = numpuntoventa;
	}

	public BigDecimal getTotal() {
		BigDecimal total = MoneyHelper.somar((getComissaoBpr() != null ? getComissaoBpr() : BigDecimal.ZERO),
								  (getReceitaExcessobagagem() != null ? getReceitaExcessobagagem() : BigDecimal.ZERO),
					 			  (getReceitaSeguroopcional() != null ? getReceitaSeguroopcional() : BigDecimal.ZERO),
					 			 (getReceitaSeguro() != null ? getReceitaSeguro() : BigDecimal.ZERO),
					 			  (getReceitaOutros() != null ? getReceitaOutros() : BigDecimal.ZERO),
					 			  (getBonificacaoMetas() != null ? getBonificacaoMetas() : BigDecimal.ZERO),
					 			  (getEntregasPassagem() != null ? getEntregasPassagem() : BigDecimal.ZERO));
		
		return MoneyHelper.arredondar(total, 2);
	}

	public BigDecimal getTotalLiquido() {
		BigDecimal totalLiquido = getTotal();
		totalLiquido = MoneyHelper.subtrair(totalLiquido, getDescontosEventuais() != null ? getDescontosEventuais() : BigDecimal.ZERO);
		totalLiquido = MoneyHelper.subtrair(totalLiquido, getDescontosFixos() != null ? getDescontosFixos() : BigDecimal.ZERO);
		totalLiquido = MoneyHelper.subtrair(totalLiquido, getIssRetido() != null ? getIssRetido() : BigDecimal.ZERO);
		totalLiquido = MoneyHelper.subtrair(totalLiquido, getRoyaties() != null ? getRoyaties() : BigDecimal.ZERO);
		
		return MoneyHelper.arredondar(totalLiquido, 2);
	}
	
	public BigDecimal getReceitaBaseComissao() {
		BigDecimal receitaBaseComissao = BigDecimal.ZERO;
		receitaBaseComissao = MoneyHelper.somar(receitaBaseComissao, (getReceitaBPR() != null ? getReceitaBPR() : BigDecimal.ZERO));
		receitaBaseComissao = MoneyHelper.subtrair(receitaBaseComissao,(getDevolvidos() != null ? getDevolvidos() : BigDecimal.ZERO));
		return MoneyHelper.arredondar(receitaBaseComissao, 2);
	}

	public String getSigla() {
		return sigla;
	}

	public void setSigla(String sigla) {
		this.sigla = sigla;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getBanco() {
		return banco;
	}

	public void setBanco(String banco) {
		this.banco = banco;
	}

	public String getConta() {
		return conta;
	}

	public void setConta(String conta) {
		this.conta = conta;
	}

	public String getAgencia() {
		return agencia;
	}

	public void setAgencia(String agencia) {
		this.agencia = agencia;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getTexto() {
		return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto",
							   new String[]{getNombempresa(),
									   		getCnpjFormatado(),
									   		getTextoValor()});
	}

	public String getTexto1() {
		try {
			if(StringUtils.isNotBlank(getCompetencia())) {
				return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto1",
						new String[]{DateUtil.getStringDate(DateUtil.getDataInicialCompetencia(getCompetencia()), "dd/MM/yyyy"),
									 DateUtil.getStringDate(DateUtil.getDataFinalCompetencia(getCompetencia()), "dd/MM/yyyy")});
			} else {
				return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto1",
						new String[]{DateUtil.getStringDate(getDataInicial(), "dd/MM/yyyy"),
									 DateUtil.getStringDate(getDataFinal(), "dd/MM/yyyy")});				
			}
		} catch (ParseException e) {
			log.error(e.getMessage(), e);
		}
		return null;
	}
	
	public String getTexto2() {
		return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto2");
	}

	private String getTextoValor() {
		StringBuilder sTextoValor = new StringBuilder();
		sTextoValor.append(NF.format(getTotalLiquido().doubleValue()))
				   .append(" (")
				   .append(new RealToWords().toWords(getTotalLiquido()))
				   .append(") **********");
		return sTextoValor.toString();
	}

	public String getMsg() {
		return Labels.getLabel("busquedaCalculoComissaoController.recibo.msg", new String[]{getNombempresa()});
	}

	public String getMsg1() {
		return Labels.getLabel("busquedaCalculoComissaoController.recibo.msg1", new String[]{getNombempresa()});
	}

	public String getCnpj() {
		return cnpj;
	}
	
	public String getCnpjFormatado() {
		return DocumentosUtil.formataCnpj(getCnpj());
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getNombempresa() {
		return nombempresa;
	}

	public void setNombempresa(String nombempresa) {
		this.nombempresa = nombempresa;
	}

	public String getDescCorreo() {
		return descCorreo;
	}

	public void setDescCorreo(String descCorreo) {
		this.descCorreo = descCorreo;
	}

	@Override
	public BigDecimal getComissaoBpr() {
		return super.getComissaoBpr() != null ? super.getComissaoBpr() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getReceitaExcessobagagem() {
		return super.getReceitaExcessobagagem() != null ? super.getReceitaExcessobagagem() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getReceitaSeguroopcional() {
		return super.getReceitaSeguroopcional() != null ? super.getReceitaSeguroopcional() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getDescontosFixos() {
		return super.getDescontosFixos() != null ? super.getDescontosFixos() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getDescontosEventuais() {
		return super.getDescontosEventuais() != null ? super.getDescontosEventuais() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getRoyaties() {
		return super.getRoyaties() != null ? super.getRoyaties() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getIssRetido() {
		return super.getIssRetido() != null ? super.getIssRetido() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getBonificacaoMetas() {
		return super.getBonificacaoMetas() != null ? super.getBonificacaoMetas() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getEntregasPassagem() {
		return super.getEntregasPassagem() != null ? super.getEntregasPassagem() : BigDecimal.ZERO;
	}

	@Override
	public BigDecimal getReceitaOutros() {
		return super.getReceitaOutros() != null ? super.getReceitaOutros() : BigDecimal.ZERO;
	}
	
	@Override
	public BigDecimal getReceitaSeguro() {
		return super.getReceitaSeguro() != null ? super.getReceitaSeguro() : BigDecimal.ZERO;
	}
	
	public String getCnpjPuntoventaFormatado() {
		if(!getCnpjPuntoventa().contains(".") && !getCnpjPuntoventa().contains("-") && !getCnpjPuntoventa().contains("/")) {
			return DocumentosUtil.formataCnpj(getCnpjPuntoventa());
		}else {
			return getCnpjPuntoventa();
		}
	}

	public String getCnpjPuntoventa() {
		return cnpjPuntoventa;
	}

	public void setCnpjPuntoventa(String cnpjPuntoventa) {
		this.cnpjPuntoventa = cnpjPuntoventa;
	}

	public String getRazonsocial() {
		return razonsocial;
	}

	public void setRazonsocial(String razonsocial) {
		this.razonsocial = razonsocial;
	}

}
