package com.rjconsultores.ventaboletos.vo.esquemaoperacional;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.CoeficienteTarifa;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.ParadaSecuenciaCombinacaoLinha;

public class RutaTramoVO {

    private Boolean ventaHandHeld;
    private Boolean solicitaNombrePasajero;
    private ClaseServicio claseServicio;
    private ClaseServicio claseServicioRutaOrigem;
    private OrgaoConcedente orgaoConcedente;
    private List<SecuenciaRutaTramoVO> lsSecuenciaRutaTramoVO;
    private List<SecuenciaRutaTramoCoeficienteVO> lsCombinacionRutaTramoVO;
    private List<Empresa> lsEmpresa;
    private CoeficienteTarifa coeficienteDefault1;
    private CoeficienteTarifa coeficienteDefault2;
    private CoeficienteTarifa coeficienteDefault3;
    private String prefixo;
    private String descRuta;
    private Boolean indSentidoIda;
    private String numRuta;
    private List<ParadaSecuenciaCombinacaoLinha> lsParadaSecuenciaCombinacaoLinhas;

    public RutaTramoVO() {
        lsSecuenciaRutaTramoVO = new ArrayList<SecuenciaRutaTramoVO>();
        lsEmpresa = new ArrayList<Empresa>();
        lsCombinacionRutaTramoVO = new ArrayList<SecuenciaRutaTramoCoeficienteVO>();
    }

    public Boolean getVentaHandHeld() {
        return ventaHandHeld;
    }

    public void setVentaHandHeld(Boolean ventaHandHeld) {
        this.ventaHandHeld = ventaHandHeld;
    }

    public Boolean getSolicitaNombrePasajero() {
        return solicitaNombrePasajero;
    }

    public void setSolicitaNombrePasajero(Boolean solicitaNombrePasajero) {
        this.solicitaNombrePasajero = solicitaNombrePasajero;
    }

    public ClaseServicio getClaseServicio() {
        return claseServicio;
    }

    public void setClaseServicio(ClaseServicio claseServicio) {
        this.claseServicio = claseServicio;
    }

    public OrgaoConcedente getOrgaoConcedente() {
        return orgaoConcedente;
    }

    public void setOrgaoConcedente(OrgaoConcedente orgaoConcedente) {
        this.orgaoConcedente = orgaoConcedente;
    }


    public String getNumRuta() {
		return numRuta;
	}

	public void setNumRuta(String numRuta) {
		this.numRuta = numRuta;
	}

	/**
     * Regresa una unmodifiable list
     *
     * @return
     */
    public List<SecuenciaRutaTramoVO> getLsSecuenciaRutaTramoVO() {
        return Collections.unmodifiableList(lsSecuenciaRutaTramoVO);
    }

    public void setLsSecuenciaRutaTramoVO(List<SecuenciaRutaTramoVO> lsSecuenciaRutaTramoVO) {
        this.lsSecuenciaRutaTramoVO = lsSecuenciaRutaTramoVO;
    }

    /**
     * Regresa una unmodifiable list
     *
     * @return
     */
    public List<SecuenciaRutaTramoCoeficienteVO> getLsCombinacionRutaTramoVO() {
        return Collections.unmodifiableList(lsCombinacionRutaTramoVO);
    }

    public void setLsCombinacionRutaTramoVO(List<SecuenciaRutaTramoCoeficienteVO> lsCombinacionRutaTramoVO) {
        this.lsCombinacionRutaTramoVO = lsCombinacionRutaTramoVO;
    }

    public List<Empresa> getLsEmpresa() {
        return lsEmpresa;
    }

    public void setLsEmpresa(List<Empresa> lsEmpresa) {
        this.lsEmpresa = lsEmpresa;
    }

    public String getPrefixo() {
        return prefixo;
    }

    public void setPrefixo(String prefixo) {
        this.prefixo = prefixo;
    }

    public String getDescRuta() {
        return descRuta;
    }

    public void setDescRuta(String descRuta) {
        this.descRuta = descRuta;
    }

	public Boolean getIndSentidoIda() {
		return indSentidoIda;
	}

	public void setIndSentidoIda(Boolean indSentidoIda) {
		this.indSentidoIda = indSentidoIda;
	}

	public CoeficienteTarifa getCoeficienteDefault1() {
		return coeficienteDefault1;
	}

	public void setCoeficienteDefaul1(CoeficienteTarifa coeficienteDefault1) {
		this.coeficienteDefault1 = coeficienteDefault1;
	}

	public CoeficienteTarifa getCoeficienteDefault2() {
		return coeficienteDefault2;
	}

	public void setCoeficienteDefaul2(CoeficienteTarifa coeficienteDefault2) {
		this.coeficienteDefault2 = coeficienteDefault2;
	}
	
	public CoeficienteTarifa getCoeficienteDefault3() {
		return coeficienteDefault3;
	}
	
	public void setCoeficienteDefaul3(CoeficienteTarifa coeficienteDefault3) {
		this.coeficienteDefault3 = coeficienteDefault3;
	}

	public List<ParadaSecuenciaCombinacaoLinha> getLsParadaSecuenciaCombinacaoLinhas() {
		return lsParadaSecuenciaCombinacaoLinhas;
	}

	public void setLsParadaSecuenciaCombinacaoLinhas(List<ParadaSecuenciaCombinacaoLinha> lsParadaSecuenciaCombinacaoLinhas) {
		this.lsParadaSecuenciaCombinacaoLinhas = lsParadaSecuenciaCombinacaoLinhas;
	}
	
	
	
	public ClaseServicio getClaseServicioRutaOrigem() {
		return claseServicioRutaOrigem;
	}

	public void setClaseServicioRutaOrigem(ClaseServicio claseServicioRutaOrigem) {
		this.claseServicioRutaOrigem = claseServicioRutaOrigem;
	}

	public Map<Parada, BigDecimal> getParadasComKmEntradaSaida(){
		Map<Parada, BigDecimal> kmEntradaSaida = new HashMap<Parada, BigDecimal>();
		for (SecuenciaRutaTramoVO s : getLsSecuenciaRutaTramoVO()){
			if (s.getKmSaidaOrigen() != null && s.getKmSaidaOrigen().compareTo(BigDecimal.ZERO) == 1){
				kmEntradaSaida.put(s.getOrigen(), s.getKmSaidaOrigen());
			}
		}
		return kmEntradaSaida;
	}
}
