package com.rjconsultores.ventaboletos.vo.impressaofiscal;

import java.math.BigDecimal;

import com.rjconsultores.ventaboletos.utilerias.UtiliteriasFiscal;

public class LeitorFiscalVO extends ImportacionFiscalVO implements Comparable<LeitorFiscalVO> {
	
	private static BigDecimal CEM = new BigDecimal(100);
	
	private String nombempresa;
	private Integer qtdeItens;
	private BigDecimal aliquota;
	
	public LeitorFiscalVO() {
		super();
		qtdeItens = 0;
		setValorEmbarque(BigDecimal.ZERO);
		setValorMulta(BigDecimal.ZERO);
		setValorPedagio(BigDecimal.ZERO);
		setValorSeguro(BigDecimal.ZERO);
		setValorTarifa(BigDecimal.ZERO);
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((getDataEmissao() == null) ? 0 : getDataEmissao().hashCode());
		result = prime * result + ((getEmpresaId() == null) ? 0 : getEmpresaId().hashCode());
		result = prime * result + ((getOrigenUf() == null) ? 0 : getOrigenUf().hashCode());
		result = prime * result + ((getDestinoUf() == null) ? 0 : getDestinoUf().hashCode());
		result = prime * result + ((getClaseServicio() == null) ? 0 : getClaseServicio().hashCode());
		result = prime * result + ((getDescmotivocancelamento() == null) ? 0 : getDescmotivocancelamento().hashCode());
		result = prime * result + ((getAliquota() == null) ? 0 : getAliquota().hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof LeitorFiscalVO))
			return false;
		LeitorFiscalVO other = (LeitorFiscalVO) obj;
		if (getDataEmissao() == null) {
			if (other.getDataEmissao() != null)
				return false;
		} else if (!getDataEmissao().equals(other.getDataEmissao()))
			return false;
		if (getEmpresaId() == null) {
			if (other.getEmpresaId() != null)
				return false;
		} else if (!getEmpresaId().equals(other.getEmpresaId()))
			return false;
		if (getOrigenUf() == null) {
			if (other.getOrigenUf() != null)
				return false;
		} else if (!getOrigenUf().equals(other.getOrigenUf()))
			return false;
		if (getDestinoUf() == null) {
			if (other.getDestinoUf() != null)
				return false;
		} else if (!getDestinoUf().equals(other.getDestinoUf()))
			return false;
		if (getClaseServicio() == null) {
			if (other.getClaseServicio() != null)
				return false;
		} else if (!getClaseServicio().equals(other.getClaseServicio()))
			return false;
		if (getDescmotivocancelamento() == null) {
			if (other.getDescmotivocancelamento() != null)
				return false;
		} else if (!getDescmotivocancelamento().equals(other.getDescmotivocancelamento()))
			return false;
		if (getAliquota() == null) {
			if (other.getAliquota() != null)
				return false;
		} else if (!getAliquota().equals(other.getAliquota()))
			return false;
		return true;
	}

	public String getNombempresa() {
		return nombempresa;
	}

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

	public Integer getQtdeItens() {
		return qtdeItens;
	}

	public void setQtdeItens(Integer qtdeItens) {
		this.qtdeItens = qtdeItens;
	}

	public BigDecimal getAliquota() {
		return aliquota;
	}

	public void setAliquota(BigDecimal aliquota) {
		this.aliquota = aliquota;
	}
	
	public BigDecimal getTotal() {
		BigDecimal total = BigDecimal.ZERO;
		total = total.add(getValorEmbarque())
					 .add(getValorMulta())
					 .add(getValorPedagio())
					 .add(getValorTarifa())
					 .add(getValorSeguro());
		return total;
	}

	@Override
	public int compareTo(LeitorFiscalVO o) {
		int retorno = getDataEmissao().compareTo(o.getDataEmissao());
		if(retorno == 0) {
			retorno = getNombempresa().compareTo(o.getNombempresa());
		}
		if(retorno == 0) {
			retorno = getOrigenUf().compareTo(o.getOrigenUf());
		}
		if(retorno == 0) {
			retorno = getDestinoUf().compareTo(o.getDestinoUf());
		}
		if(retorno == 0) {
			retorno = getClaseServicio().compareTo(o.getClaseServicio());
		}
		if(retorno == 0) {
			retorno = getDescmotivocancelamento().compareTo(o.getDescmotivocancelamento());
		}
		return retorno;
	}
	
	public BigDecimal getValorIcms() {
		return UtiliteriasFiscal.arredondar(getValorTarifa().multiply(getAliquota().divide(CEM)));
	}

}
