package com.rjconsultores.ventaboletos.vo.pricing;

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

import org.apache.commons.lang.StringUtils;

public class GP_PricingOcupaAntecipaVO {
	
	public static final Integer CANTDIASMAXDEFAULT = 365;
	
	private Integer pricingocupaantecipaId;
	private String dias;
	private Integer antecipacao;
	private List<GP_PricingOcupaAntecipaPoltronasVO> poltronas;
	private Integer ocupMin;
	private Integer ocupMax;
	private Integer diaMin;
	private Integer diaMax;
	private BigDecimal percentual;
	private String cor;
	private String auxDesc;
	
	public GP_PricingOcupaAntecipaVO() {
		super();
	}
	
	public GP_PricingOcupaAntecipaVO(GP_PricingOcupaAntecipaVO pricingOcupacaoAntecipa) {
		this(pricingOcupacaoAntecipa, false);
	}

	public GP_PricingOcupaAntecipaVO(GP_PricingOcupaAntecipaVO pricingOcupacaoAntecipa, boolean somentePoltronasMarcadas) {
		this();
		this.pricingocupaantecipaId = pricingOcupacaoAntecipa.getPricingocupaantecipaId();
		this.dias = pricingOcupacaoAntecipa.getDias();
		this.antecipacao = pricingOcupacaoAntecipa.getAntecipacao();
		this.ocupMin = pricingOcupacaoAntecipa.getOcupMin();
		this.ocupMax = pricingOcupacaoAntecipa.getOcupMax();
		this.diaMin = pricingOcupacaoAntecipa.getDiaMin();
		this.diaMax = pricingOcupacaoAntecipa.getDiaMax();
		this.percentual = pricingOcupacaoAntecipa.getPercentual();
		this.cor = pricingOcupacaoAntecipa.getCor();
		this.auxDesc = pricingOcupacaoAntecipa.getAuxDesc();
		adicionarPoltronas(pricingOcupacaoAntecipa, somentePoltronasMarcadas);
	}
	
	private void adicionarPoltronas(GP_PricingOcupaAntecipaVO pricingOcupacaoAntecipa, boolean somentePoltronasMarcadas) {
		if(pricingOcupacaoAntecipa.getPoltronas() != null) {
			this.poltronas = new ArrayList<GP_PricingOcupaAntecipaPoltronasVO>();
			for (GP_PricingOcupaAntecipaPoltronasVO poltrona : pricingOcupacaoAntecipa.getPoltronas()) {
				if(!somentePoltronasMarcadas || poltrona.isAdicionar()) {
					this.poltronas.add(new GP_PricingOcupaAntecipaPoltronasVO(poltrona));
				}
			}
		}
	}

	public String getDias() {
		return dias;
	}

	public void setDias(String dias) {
		this.dias = dias;
	}

	public Integer getAntecipacao() {
		return antecipacao;
	}

	public void setAntecipacao(Integer antecipacao) {
		this.antecipacao = antecipacao;
	}

	public List<GP_PricingOcupaAntecipaPoltronasVO> getPoltronas() {
		return poltronas;
	}

	public void setPoltronas(List<GP_PricingOcupaAntecipaPoltronasVO> poltronas) {
		this.poltronas = poltronas;
	}

	public Integer getOcupMin() {
		return ocupMin;
	}

	public void setOcupMin(Integer ocupMin) {
		this.ocupMin = ocupMin;
	}

	public Integer getOcupMax() {
		return ocupMax;
	}

	public void setOcupMax(Integer ocupMax) {
		this.ocupMax = ocupMax;
	}

	public Integer getDiaMin() {
		return diaMin;
	}

	public void setDiaMin(Integer diaMin) {
		this.diaMin = diaMin;
	}

	public Integer getDiaMax() {
		return diaMax;
	}

	public void setDiaMax(Integer diaMax) {
		this.diaMax = diaMax;
	}

	public BigDecimal getPercentual() {
		return percentual;
	}

	public void setPercentual(BigDecimal percentual) {
		this.percentual = percentual;
	}

	public void marcarPoltronas() {
		if(poltronas == null || poltronas.isEmpty()) {
			poltronas = GP_PricingOcupaAntecipaPoltronasVO.carregarPoltronasPadrao();
		}
		
		for (GP_PricingOcupaAntecipaPoltronasVO poltrona : poltronas) {
			if(poltrona.getPoltrona() >= getOcupMin() && poltrona.getPoltrona() <= getOcupMax()) {
				poltrona.setCor(getCor());
				poltrona.setPercentual(getPercentual());
				poltrona.setPricingocupaantecipaId(getPricingocupaantecipaId());
			}
		}
	}

	public String getCor() {
		return cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	@Override
	public String toString() {
		return "GP_PricingOcupacaoAntecipaVO [dias=" + dias + ", antecipacao=" + antecipacao + ", poltronas=" + poltronas + ", ocupMin=" + ocupMin + ", ocupMax=" + ocupMax + ", diaMin=" + diaMin + ", diaMax=" + diaMax + ", percentual=" + percentual + ", cor=" + cor + "]";
	}

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

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof GP_PricingOcupaAntecipaVO))
			return false;
		GP_PricingOcupaAntecipaVO other = (GP_PricingOcupaAntecipaVO) obj;
		if (getAntecipacao() == null) {
			if (other.getAntecipacao() != null)
				return false;
		} else if (!getAntecipacao().equals(other.getAntecipacao()))
			return false;
		if (getDias() == null) {
			if (other.getDias() != null)
				return false;
		} else if (!getDias().equals(other.getDias()))
			return false;
		return true;
	}

	public String getAuxDesc() {
		return StringUtils.isNotBlank(auxDesc) ? auxDesc : antecipacao != null ? antecipacao.toString() : "";
	}

	public void setAuxDesc(String auxDesc) {
		this.auxDesc = auxDesc;
	}

	public Integer getPricingocupaantecipaId() {
		return pricingocupaantecipaId;
	}

	public void setPricingocupaantecipaId(Integer pricingocupaantecipaId) {
		this.pricingocupaantecipaId = pricingocupaantecipaId;
	}

}
