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

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

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Label;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.api.Spinner;

import com.rjconsultores.ventaboletos.entidad.EsquemaTramo;
import com.rjconsultores.ventaboletos.entidad.ParadaEsquema;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 * 
 * @author Administrador
 */
@Controller("tiempoEstanciaEsquemaTramoController")
@Scope("prototype")
public class TiempoEstanciaEsquemaTramoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private Short sequenciaSize;
	private MyListbox esquemaTramoList;
	private EsquemaTramo esquemaTramo;
	private ParadaEsquema paradaEsquema;
	private Label lbTramo;
	private Spinner spHora;
	private Spinner spMinuto;
	private Spinner spHoraExcepcion;
	private Spinner spMinutoExcepcion;
	private Textbox txtPlataforma;

	// private Boolean primeraSequencia;

	public Label getLbTramo() {
		return lbTramo;
	}

	public void setLbTramo(Label lbTramo) {
		this.lbTramo = lbTramo;
	}

	public EsquemaTramo getEsquemaTramo() {
		return esquemaTramo;
	}

	public void setEsquemaTramo(EsquemaTramo esquemaTramo) {
		this.esquemaTramo = esquemaTramo;
	}

	public ParadaEsquema getParadaEsquema() {
		return paradaEsquema;
	}

	public void setParadaEsquema(ParadaEsquema paradaEsquema) {
		this.paradaEsquema = paradaEsquema;
	}

	public Spinner getSpHora() {
		return spHora;
	}

	public void setSpHora(Spinner spHora) {
		this.spHora = spHora;
	}

	public Spinner getSpMinuto() {
		return spMinuto;
	}

	public void setSpMinuto(Spinner spMinuto) {
		this.spMinuto = spMinuto;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);

		esquemaTramo = (EsquemaTramo) Executions.getCurrent().getArg().get("esquemaTramo");
		paradaEsquema = (ParadaEsquema) Executions.getCurrent().getArg().get("paradaEsquema");
		esquemaTramoList = (MyListbox) Executions.getCurrent().getArg().get("esquemaTramoList");
		sequenciaSize = (Short) Executions.getCurrent().getArg().get("sequenciaSize");

		if (paradaEsquema.getNumsecuencia().equals(Short.valueOf("1"))) {
			spHora.setDisabled(true);
			spMinuto.setDisabled(true);
			txtPlataforma.setDisabled(false);
		}
		if (paradaEsquema.getNumsecuencia().equals(sequenciaSize)) {
			spHora.setDisabled(true);
			spMinuto.setDisabled(true);
			txtPlataforma.setDisabled(true);
		}

		String parada = paradaEsquema.getParada().getCveparada();
		lbTramo.setValue(parada);

		if (esquemaTramo.getTiempoEstancia() != null) {
			Calendar c = Calendar.getInstance();
			c.setTime(esquemaTramo.getTiempoEstancia());

			Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
			Long minutos = (tempo % 60);
			int horas = (tempo.intValue() / 60);

			spMinuto.setValue(minutos.intValue());
			spHora.setValue(horas);
		}

		if (esquemaTramo.getExcepcionRecorrido() != null) {
			Calendar c = Calendar.getInstance();
			c.setTime(esquemaTramo.getExcepcionRecorrido());

			Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), c.getTime());
			Long minutos = (tempo % 60);
			int horas = (tempo.intValue() / 60);

			spMinutoExcepcion.setValue(minutos.intValue());
			spHoraExcepcion.setValue(horas);
		}
	}

	public void onClick$btnCerrar(Event ev) {
		closeWindow();
	}

	public void onClick$btnSalvar(Event ev) {
		Date dataHorInicioSistema = DateUtil.getFecInicio().getTime();

		if (!paradaEsquema.getNumsecuencia().equals(Short.valueOf("1"))) {
			Date tiempoEstancia = DateUtil.getFecInicio(spHora.getValue(), spMinuto.getValue()).getTime();

			if ((tiempoEstancia != null) && (DateUtil.compareDate(tiempoEstancia, dataHorInicioSistema) == 0)) {
				esquemaTramo.setTiempoEstancia(null);
				paradaEsquema.setTiempoEstancia(null);
			} else {
				esquemaTramo.setTiempoEstancia(tiempoEstancia);
				paradaEsquema.setTiempoEstancia(tiempoEstancia);
			}
		}

		Date excepcionRecorrido = DateUtil.getFecInicio(spHoraExcepcion.getValue(), spMinutoExcepcion.getValue()).getTime();
		if ((excepcionRecorrido != null) && (DateUtil.compareDate(excepcionRecorrido, dataHorInicioSistema) == 0)) {
			esquemaTramo.setExcepcionRecorrido(null);
			paradaEsquema.setExcepcionRecorrido(null);
		} else {
			esquemaTramo.setExcepcionRecorrido(excepcionRecorrido);
			paradaEsquema.setExcepcionRecorrido(excepcionRecorrido);
		}

		if (!paradaEsquema.getNumsecuencia().equals(sequenciaSize)) {
			String plataforma = txtPlataforma.getValue();
			esquemaTramo.setPlataforma(plataforma);
			paradaEsquema.setPlataforma(plataforma);
		}
		
		esquemaTramoList.updateItem(paradaEsquema);

		for(Object o : esquemaTramoList.getData()){
			esquemaTramoList.updateItem(o);
		}

		closeWindow();
	}
}
