package com.rjconsultores.ventaboletos.vo.comissao;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Set;

import com.rjconsultores.ventaboletos.constantes.Constantes;

public class MovimentosAtrasoVO implements Comparable<MovimentosAtrasoVO> {

	private Integer puntoventaId;
	private String nombpuntoventa;
	private String numPuntoVenta;
	private String competencia;
	private Integer diasemtransito;
	private Date dataMovimento;
	private SituacaoDiaMovimento situacao;
	private String numtelefonouno;
	private String uf;
	private String nombpuntoventaPadre;
	private Integer intervalofechamento;
	
	private Set<Integer> diasEmAtraso;
	
	public MovimentosAtrasoVO() {
		super();
	}

	public MovimentosAtrasoVO(Integer puntoventaId, Date dataMovimento) {
		this();
		this.puntoventaId = puntoventaId;
		this.dataMovimento = dataMovimento;
	}

	public MovimentosAtrasoVO(Integer puntoventaId, String nombpuntoventa, String numPuntoVenta, String competencia, Integer diasemtransito, Date dataMovimento, SituacaoDiaMovimento situacao, Integer intervalofechamento, String nombpuntoventaPadre, String uf, String numtelefonouno) {
		this();
		this.puntoventaId = puntoventaId;
		this.nombpuntoventa = nombpuntoventa;
		this.numPuntoVenta = numPuntoVenta;
		this.competencia = competencia;
		this.diasemtransito = diasemtransito;
		this.dataMovimento = dataMovimento;
		this.situacao = situacao;
		this.intervalofechamento = intervalofechamento;
		this.nombpuntoventaPadre = nombpuntoventaPadre;
		this.uf = uf;
		this.numtelefonouno = numtelefonouno;
		
		/*movimentosAtrasoVO.setIntervalofechamento(rset.getInt("INTERVALOFECHAMENTO"));
		movimentosAtrasoVO.setNombpuntoventaPadre(rset.getString("NOMPUNTOVENTAPADRE"));
		movimentosAtrasoVO.setUf(rset.getString("UF"));
		movimentosAtrasoVO.setNumtelefonouno(rset.getString("NUMTELEFONOUNO"));*/
	}

	public Integer getPuntoventaId() {
		return puntoventaId;
	}

	public void setPuntoventaId(Integer puntoventaId) {
		this.puntoventaId = puntoventaId;
	}

	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 String getCompetencia() {
		return competencia;
	}

	public void setCompetencia(String competencia) {
		this.competencia = competencia;
	}
	
	public enum SituacaoDiaMovimento {
		ENTREGUE("EN","Entregue"),
		ATRASADO("AT","Atrasado"),
		AGUARDANDO("AG","Aguardando");

		private String shortDescricao;
		private String descricao;

		private SituacaoDiaMovimento(String shortDescricao, String descricao) {
			this.shortDescricao = shortDescricao;
			this.descricao = descricao;
		}
		
		public String getShortDescricao() {
			return shortDescricao;
		}

		@Override
		public String toString() {
			return this.descricao;
		}

	}

	@Override
	public int compareTo(MovimentosAtrasoVO o) {
		return this.nombpuntoventa.compareTo(o.nombpuntoventa);
	}

	public Integer getDiasemtransito() {
		return diasemtransito;
	}

	public void setDiasemtransito(Integer diasemtransito) {
		this.diasemtransito = diasemtransito;
	}

	public Date getDataMovimento() {
		return dataMovimento;
	}

	public void setDataMovimento(Date dataMovimento) {
		this.dataMovimento = dataMovimento;
	}

	public SituacaoDiaMovimento getSituacao() {
		return situacao;
	}

	public void setSituacao(SituacaoDiaMovimento situacao) {
		this.situacao = situacao;
	}
	
	public String getDescricaoSituacao() {
		return getSituacao() != null ? getSituacao().toString() : "";
	}

	public String getShortDescricaoSituacao() {
		return getSituacao() != null ? getSituacao().getShortDescricao() : "";
	}

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

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		MovimentosAtrasoVO other = (MovimentosAtrasoVO) obj;
		if (puntoventaId == null) {
			if (other.puntoventaId != null)
				return false;
		} else if (!puntoventaId.equals(other.puntoventaId))
			return false;
		return true;
	}

	public String getNumtelefonouno() {
		return numtelefonouno;
	}

	public void setNumtelefonouno(String numtelefonouno) {
		this.numtelefonouno = numtelefonouno;
	}

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public String getNombpuntoventaPadre() {
		return nombpuntoventaPadre;
	}

	public void setNombpuntoventaPadre(String nombpuntoventaPadre) {
		this.nombpuntoventaPadre = nombpuntoventaPadre;
	}

	public Integer getIntervalofechamento() {
		return intervalofechamento;
	}

	public void setIntervalofechamento(Integer intervalofechamento) {
		this.intervalofechamento = intervalofechamento;
	}

	public Set<Integer> getDiasEmAtraso() {
		return diasEmAtraso;
	}

	public void setDiasEmAtraso(Set<Integer> diasEmAtraso) {
		this.diasEmAtraso = diasEmAtraso;
	}
	
	public String getStrDiasEmAtraso() {
		List<Integer> dias = Arrays.asList(getDiasEmAtraso().toArray(new Integer[0]));
		java.util.Collections.sort(dias);
		return dias.toString().replaceAll("[^0-9,]", "");
	}

	public String getDesIntervalofechamento() {
		switch (intervalofechamento) {
		case Constantes.INTERVALO_FECHAMENTO_DIARIO:
			return "Diário";
		case Constantes.INTERVALO_FECHAMENTO_SEMANAL:
			return "Semanal";
		case Constantes.INTERVALO_FECHAMENTO_DECENDIAL:
			return "Decendial";
		case Constantes.INTERVALO_FECHAMENTO_QUINZENAL:
			return "Quinzenal";
		case Constantes.INTERVALO_FECHAMENTO_MENSAL:
			return "Mensal";
		default:
			return "";
		}
	}
	
}
