package com.rjconsultores.ventaboletos.vo.comissao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.zkoss.util.resource.Labels;

import com.rjconsultores.ventaboletos.entidad.Conferencia;
import com.rjconsultores.ventaboletos.enums.comissao.StatusLogConferencia;

public class EventosFinanceirosVO {

	private Long eventoextraId;
	private String numdocumento;
	private Date fechoringreso;
	private BigDecimal impingreso;
	private String desctipoevento;
	private String descinfo;
	private Integer status;
	private Integer formapagoId;
	private String descpago;
	private Boolean indconferenciafisicacomissao;
	private String indtipo; /* 0- Debito, 1- Credito */
	private String nombusuario;

	private Integer comemptipoeventoextraId;
	private Integer tipoeventoextradebcred;
	private Integer comempformapagoId;

	private Long logconferenciaId;
	private boolean conferido;

	private Boolean exigeConferenciaAba;

	private Long boletoId;
	
	private String numFolioSistema;
	
	private Conferencia conferencia;
	
	private String cvetipoevento;
	
	private Date feccorte;
	
	private BigDecimal icmsBase;
	private Integer estadoId;
	
	private Long cajaDiversosId;
	private Integer usuarioId;
	private Integer turnoId;
	private List<FormaPagoEventosFinanceirosVO>  formapagos;
	
	

	public EventosFinanceirosVO(Long eventoextraId, Long logconferenciaId) {
		this.eventoextraId = eventoextraId;
		this.logconferenciaId = logconferenciaId;
	}
	
	public EventosFinanceirosVO() {
		
	}
	
	public Long getEventoextraId() {
		return eventoextraId;
	}

	public void setEventoextraId(Long eventoextraId) {
		this.eventoextraId = eventoextraId;
	}

	public String getNumdocumento() {
		return numdocumento;
	}

	public void setNumdocumento(String numdocumento) {
		this.numdocumento = numdocumento;
	}

	public Date getFechoringreso() {
		return fechoringreso;
	}

	public void setFechoringreso(Date fechoringreso) {
		this.fechoringreso = fechoringreso;
	}

	public BigDecimal getImpingreso() {
		return impingreso;
	}

	public void setImpingreso(BigDecimal impingreso) {
		this.impingreso = impingreso;
	}

	public String getDesctipoevento() {
		return desctipoevento;
	}

	public void setDesctipoevento(String desctipoevento) {
		this.desctipoevento = desctipoevento;
	}

	public String getDescinfo() {
		return descinfo;
	}

	public void setDescinfo(String descinfo) {
		this.descinfo = descinfo;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public String getStatusDescricao() {
		StatusLogConferencia statusLogConferencia = StatusLogConferencia.getStatusLogConferencia(status);
		if (statusLogConferencia != null) {
			return statusLogConferencia.toString();
		}
		return "";
	}

	public Integer getFormapagoId() {
		return formapagoId;
	}

	public void setFormapagoId(Integer formapagoId) {
		this.formapagoId = formapagoId;
	}

	public String getDescpago() {
		return descpago;
	}

	public void setDescpago(String descpago) {
		this.descpago = descpago;
	}

	public Boolean getIndconferenciafisicacomissao() {
		return indconferenciafisicacomissao;
	}

	public void setIndconferenciafisicacomissao(Boolean indconferenciafisicacomissao) {
		this.indconferenciafisicacomissao = indconferenciafisicacomissao;
	}

	public String getIndtipo() {
		return indtipo;
	}

	public void setIndtipo(String indtipo) {
		this.indtipo = indtipo;
	}

	public boolean isCredito() {
		return StringUtils.isNotBlank(getIndtipo()) && "1".equals(getIndtipo());
	}

	public boolean isDebito() {
		return StringUtils.isNotBlank(getIndtipo()) && "0".equals(getIndtipo());
	}

	public String getDebitoCredito() {
		return isCredito() ? Labels.getLabel("conferenciaController.lbCredito.value") : Labels.getLabel("conferenciaController.lbDebito.value");
	}

	public String getNombusuario() {
		return nombusuario;
	}

	public void setNombusuario(String nombusuario) {
		this.nombusuario = nombusuario;
	}

	public Long getLogconferenciaId() {
		return logconferenciaId;
	}

	public void setLogconferenciaId(Long logconferenciaId) {
		this.logconferenciaId = logconferenciaId;
	}

	public boolean isConferido() {
		return conferido;
	}

	public void setConferido(boolean conferido) {
		this.conferido = conferido;
	}

	public Integer getComemptipoeventoextraId() {
		return comemptipoeventoextraId;
	}

	public void setComemptipoeventoextraId(Integer comemptipoeventoextraId) {
		this.comemptipoeventoextraId = comemptipoeventoextraId;
	}
	
	public Integer getTipoeventoextradebcred() {
		return tipoeventoextradebcred;
	}
	
	public void setTipoeventoextradebcred(Integer tipoeventoextradebcred) {
		this.tipoeventoextradebcred = tipoeventoextradebcred;
	}

	public Integer getComempformapagoId() {
		return comempformapagoId;
	}

	public void setComempformapagoId(Integer comempformapagoId) {
		this.comempformapagoId = comempformapagoId;
	}

	public boolean isExigeConferencia() {
		return getComemptipoeventoextraId() != null || getComempformapagoId() != null || isExigeConferenciaTipoEvento();
	}

	public boolean isExigeConferenciaTipoEvento() {
		if(getTipoeventoextradebcred() != null && getTipoeventoextradebcred() != 0) {
			if(getTipoeventoextradebcred() == 1){
				return true;
		    }else if(isDebito() && getTipoeventoextradebcred() == 2){
		    	return true;
			}else if(isCredito() && getTipoeventoextradebcred() == 3){
				return true;
			}
		}
		return false;
	}

	public Boolean getExigeConferenciaAba() {
		return exigeConferenciaAba;
	}

	public void setExigeConferenciaAba(Boolean exigeConferenciaAba) {
		this.exigeConferenciaAba = exigeConferenciaAba;
	}

	public String getOrderExigeConferencia() {
		if ((getExigeConferenciaAba() != null && getExigeConferenciaAba()) || isExigeConferencia()) {
			if (!isConferido()) {
				return "A";
			} else if (isConferido()) {
				return "B";
			}
		}
		return "C";
	}
	
	public Date getOrderDataMovimento(){
		return conferencia.getDatamovimento();
	}

	public Long getBoletoId() {
		return boletoId;
	}

	public void setBoletoId(Long boletoId) {
		this.boletoId = boletoId;
	}
	
	public String getNumFolioSistema() {
		return numFolioSistema;
	}

	public void setNumFolioSistema(String numFolioSistema) {
		this.numFolioSistema = numFolioSistema;
	}

	public Conferencia getConferencia() {
		return conferencia;
	}

	public void setConferencia(Conferencia conferencia) {
		this.conferencia = conferencia;
	}

	public String getCvetipoevento() {
		return cvetipoevento;
	}

	public void setCvetipoevento(String cvetipoevento) {
		this.cvetipoevento = cvetipoevento;
	}

	public Date getFeccorte() {
		return feccorte;
	}

	public void setFeccorte(Date feccorte) {
		this.feccorte = feccorte;
	}

	public BigDecimal getIcmsBase() {
		return icmsBase;
	}

	public void setIcmsBase(BigDecimal icmsBase) {
		this.icmsBase = icmsBase;
	}

	public Integer getEstadoId() {
		return estadoId;
	}

	public void setEstadoId(Integer estadoId) {
		this.estadoId = estadoId;
	}

	public Long getCajaDiversosId() {
		return cajaDiversosId;
	}

	public void setCajaDiversosId(Long cajaDiversosId) {
		this.cajaDiversosId = cajaDiversosId;
	}

	public Integer getUsuarioId() {
		return usuarioId;
	}

	public void setUsuarioId(Integer usuarioId) {
		this.usuarioId = usuarioId;
	}

	public Integer getTurnoId() {
		return turnoId;
	}

	public void setTurnoId(Integer turnoId) {
		this.turnoId = turnoId;
	}
	
	

	public List<FormaPagoEventosFinanceirosVO> getFormapagos() {
		return formapagos;
	}

	public void setFormapagos(List<FormaPagoEventosFinanceirosVO> formapagos) {
		this.formapagos = formapagos;
	}

	public String getDescFormapagos() {
		StringBuilder sFormapagos = new StringBuilder();
		for (FormaPagoEventosFinanceirosVO formapago : formapagos) {
			if (sFormapagos.length() > 0) {
				sFormapagos.append(", ");
			}
			sFormapagos.append(formapago.getDescpago());
		}
		return sFormapagos.toString();
	}
	
	public BigDecimal getTotal() {
		BigDecimal total = BigDecimal.ZERO;
		for (FormaPagoEventosFinanceirosVO formapagoVO : formapagos) {
			total = total.add(formapagoVO.getImporte());
		}
		return total;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((eventoextraId == null) ? 0 : eventoextraId.hashCode());
		result = prime * result + ((logconferenciaId == null) ? 0 : logconferenciaId.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		EventosFinanceirosVO other = (EventosFinanceirosVO) obj;
		if (eventoextraId == null) {
			if (other.eventoextraId != null)
				return false;
		} else if (!eventoextraId.equals(other.eventoextraId))
			return false;
		if (logconferenciaId == null) {
			if (other.logconferenciaId != null)
				return false;
		} else if (!logconferenciaId.equals(other.logconferenciaId))
			return false;
		return true;
	}
	
	
	
	
}
