/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.utilerias.render;

import com.rjconsultores.ventaboletos.entidad.ParadaEsquema;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;

/**
 * 
 * @author Rafius
 */
public class RenderConfiguracionCorridaTramo implements ListitemRenderer {
	
	private Date dataHorInicioSistema = DateUtil.getFecInicio().getTime();
	
	private long minutosPartida = 0l;
	private int horaPartida = 0;	
	
	public RenderConfiguracionCorridaTramo(){
		super();
	}
	
	public RenderConfiguracionCorridaTramo(Date tempoPartida){
		alterarDataPartida(tempoPartida);
	}
		
	public void alterarDataPartida(Date tempoPartida) {
		if (tempoPartida != null) {
			Calendar c = Calendar.getInstance();
			c.setTime(tempoPartida);

			horaPartida = c.get(Calendar.HOUR_OF_DAY);
			minutosPartida = c.get(Calendar.MINUTE);
		}
	}

	public void render(Listitem lstm, Object o) throws Exception {
		ParadaEsquema pe = (ParadaEsquema) o;

		Listcell lc = new Listcell(pe.getNumsecuencia().toString());

		lc.setParent(lstm);

		lc = new Listcell(pe.getParada().getDescparada());
		lc.setParent(lstm);

		if (pe.getTiempoEstancia() == null) {
			lc = new Listcell("");
		} else if (DateUtil.compareDate(pe.getTiempoEstancia(), dataHorInicioSistema) == 0) {
			lc = new Listcell("");
		} else {
			Calendar c = Calendar.getInstance();
			c.setTime(pe.getTiempoEstancia());
			Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
			long minutos = (tempo % 60);
			int horas = (tempo.intValue() / 60);

			String sMinutos = String.valueOf(minutos);
			lc = new Listcell(horas + ":" + ((sMinutos.length() < 2) ? "0" + sMinutos : sMinutos));
		}
		lc.setParent(lstm);

		if (pe.getPadraoRecorrido() == null) {
			lc = new Listcell("");
		} else {
			Calendar c = Calendar.getInstance();
			c.setTime(pe.getPadraoRecorrido());
			Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
			long minutos = (tempo % 60);
			int horas = (tempo.intValue() / 60);

			String sMinutos = String.valueOf(minutos);
			lc = new Listcell(horas + ":" + ((sMinutos.length() < 2) ? "0" + sMinutos : sMinutos));
		}
		lc.setParent(lstm);		
	

		List<Listitem> itens = ((Listbox)lstm.getParent()).getItems();
		Long tempoLocalidade = 0l;
		
		if (pe.getNumsecuencia() != 1) {
			for (Listitem item : itens) {
				ParadaEsquema parada = (ParadaEsquema) item.getAttributes().get("data");
				if (parada == null) {
					break;
				}
				if (parada != null
						&& (parada.getNumsecuencia().intValue() < pe.getNumsecuencia().intValue())) {
					Long tempoPadrao = 0l;
					Long tempoParada = 0l;

					if (parada.getExcepcionRecorrido() != null) {
						tempoPadrao = getMinutos(parada.getExcepcionRecorrido());
					} else {
						if (parada.getPadraoRecorrido() != null) {
							tempoPadrao = getMinutos(parada.getPadraoRecorrido());
						}
					}
					if (parada.getTiempoEstancia() != null) {
						tempoParada = getMinutos(parada.getTiempoEstancia());
					}
					tempoLocalidade += (tempoPadrao + tempoParada);
				}
			}
		}
		int horasLocalidade = (tempoLocalidade.intValue() / 60) + horaPartida;
		long minutosLocalidade = (tempoLocalidade % 60) + minutosPartida;
		
		while(minutosLocalidade >= 60){
			horasLocalidade +=1;
			minutosLocalidade -= 60;
		}
		while(horasLocalidade >= 24){
			horasLocalidade -= 24;
		}
		if(horasLocalidade == 0 && minutosLocalidade == 0l){
			lc = new Listcell("");
		}else{
			String sMinutos = String.valueOf(minutosLocalidade);
			lc = new Listcell(horasLocalidade + ":" + ((sMinutos.length() < 2) ? "0" + sMinutos : sMinutos));
		}
		lc.setParent(lstm);
	
		if (pe.getExcepcionRecorrido() == null) {
			lc = new Listcell("");
		} else if (DateUtil.compareDate(pe.getExcepcionRecorrido(), dataHorInicioSistema) == 0) {
			lc = new Listcell("");
		} else {
			Calendar c = Calendar.getInstance();
			c.setTime(pe.getExcepcionRecorrido());
			Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
			long minutos = (tempo % 60);
			int horas = (tempo.intValue() / 60);

			String sMinutos = String.valueOf(minutos);
			lc = new Listcell(horas + ":" + ((sMinutos.length() < 2) ? "0" + sMinutos : sMinutos));
		}
		lc.setParent(lstm);

		lc = new Listcell(pe.getPlataforma());
		lc.setParent(lstm);

		lstm.setAttribute("data", pe);
	}
	
	private Long getMinutos(Date data){
		Calendar c = Calendar.getInstance();
		c.setTime(data);
		return DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
	}
}
