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

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.MercadoCompetido;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.MercadoCompetidoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import java.util.Calendar;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;

/**
 * 
 * @author rodrigo
 */
@Controller("editarMercadoCompetidoController")
@Scope("prototype")
public class EditarMercadoCompetidoController extends MyGenericForwardComposer {

	@Autowired
	private MercadoCompetidoService mercadoCompetidoService;
	@Autowired
	private ClaseServicioService claseServicioService;
	private List<ClaseServicio> lsClaseServicio;
	private MercadoCompetido mercadoCompetido;
	private MyListbox mercadoCompetidoList;
	private Button btnApagar;
	private Combobox cmbClaseServicio;
	private MyComboboxParada cmbOrigem;
	private MyComboboxParada cmbDestino;
	private static Logger log = Logger.getLogger(EditarMercadoCompetidoController.class);

	public Combobox getCmbClaseServicio() {
		return cmbClaseServicio;
	}

	public void setCmbClaseServicio(Combobox cmbClaseServicio) {
		this.cmbClaseServicio = cmbClaseServicio;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

	public List<ClaseServicio> getLsClaseServicio() {
		return lsClaseServicio;
	}

	public void setLsClaseServicio(List<ClaseServicio> lsClaseServicio) {
		this.lsClaseServicio = lsClaseServicio;
	}

	public MercadoCompetido getMercadoCompetido() {
		return mercadoCompetido;
	}

	public void setMercadoCompetido(MercadoCompetido mercadoCompetido) {
		this.mercadoCompetido = mercadoCompetido;
	}

	public MyComboboxParada getCmbDestino() {
		return cmbDestino;
	}

	public void setCmbDestino(MyComboboxParada cmbDestino) {
		this.cmbDestino = cmbDestino;
	}

	public MyComboboxParada getCmbOrigem() {
		return cmbOrigem;
	}

	public void setCmbOrigem(MyComboboxParada cmbOrigem) {
		this.cmbOrigem = cmbOrigem;
	}

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

		MercadoCompetido mercadoCompetidoS = (MercadoCompetido) Executions.getCurrent().getArg().get("mercadoCompetido");
		mercadoCompetido = (mercadoCompetidoS.getMercadocompetidoId() == null) ? mercadoCompetidoS : mercadoCompetidoService.obtenerID(mercadoCompetidoS.getMercadocompetidoId());
		mercadoCompetidoList = (MyListbox) Executions.getCurrent().getArg().get("mercadoCompetidoList");

		lsClaseServicio = claseServicioService.obtenerTodos();
		// Leticia- Nao pode ter opção TODOS
		Short menosUm = -1;
		ClaseServicio cs = claseServicioService.obtenerID((int)menosUm);
		if (cs != null) {
			lsClaseServicio.remove(cs);
		}

		if (mercadoCompetido.getMercadocompetidoId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		} else {
			Parada origem = mercadoCompetido.getOrigem();
			if (origem != null) {
				cmbOrigem.setInitialValue(origem);
				cmbOrigem.setText(origem.getDescparada());
			}

			Parada destino = mercadoCompetido.getDestino();
			if (destino != null) {
				cmbDestino.setInitialValue(destino);
				cmbDestino.setText(destino.getDescparada());
			}
		}

		cmbClaseServicio.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		cmbClaseServicio.getValue();
		cmbOrigem.getValue(true);
		cmbDestino.getValue(true);

		mercadoCompetido.setFecmodif(Calendar.getInstance().getTime());
		mercadoCompetido.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		mercadoCompetido.setActivo(Boolean.TRUE);

		Comboitem cbiClaseServicio = cmbClaseServicio.getSelectedItem();
		ClaseServicio claseServicio = null;
		if (cbiClaseServicio != null) {
			claseServicio = (ClaseServicio) cbiClaseServicio.getValue();
		}

		Parada origem = (Parada) (cmbOrigem.getSelectedItem() == null ? null : cmbOrigem.getSelectedItem().getValue());
		// if (origem != null) {
		// mercadoCompetido.setOrigem(origem);
		// } else {
		// Messagebox.show(
		// Labels.getLabel("MSG.necesita.origen"),
		// Labels.getLabel(".window.title"),
		// Messagebox.OK, Messagebox.EXCLAMATION);
		// return;
		// }
		//
		Parada destino = (Parada) (cmbDestino.getSelectedItem() == null ? null : cmbDestino.getSelectedItem().getValue());
		// if (destino != null) {
		// mercadoCompetido.setDestino(destino);
		// } else {
		// Messagebox.show(
		// Labels.getLabel("MSG.necesita.destino"),
		// Labels.getLabel(".window.title"),
		// Messagebox.OK, Messagebox.EXCLAMATION);
		// return;
		// }

		try {
			if (!origem.getParadaId().equals(destino.getParadaId())) {
				if (mercadoCompetido.getMercadocompetidoId() == null) {
					boolean existeMercadoCompetido = mercadoCompetidoService.existe(claseServicio, origem, destino);

					if (!existeMercadoCompetido) {
						mercadoCompetidoService.suscribir(mercadoCompetido);
						mercadoCompetidoList.updateItem(mercadoCompetido);

						Messagebox.show(
								Labels.getLabel("editarMercadoCompetidoController.btnFechar.MSG.SuscbrirOK"),
								Labels.getLabel("editarMercadoCompetidoController.window.title"),
								Messagebox.OK, Messagebox.INFORMATION);

						closeWindow();
					} else {
						Messagebox.show(
								Labels.getLabel("MSG.Registro.Existe"),
								Labels.getLabel("editarMercadoCompetidoController.window.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
					}
				} else {
					mercadoCompetidoService.actualizacion(mercadoCompetido);
					mercadoCompetidoList.addItem(mercadoCompetido);

					Messagebox.show(
							Labels.getLabel("editarMercadoCompetidoController.btnFechar.MSG.SuscbrirOK"),
							Labels.getLabel("editarMercadoCompetidoController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);

					closeWindow();
				}
			} else {
				Messagebox.show(
						Labels.getLabel("MSG.Origem.Igual.Destino"),
						Labels.getLabel("editarMercadoCompetidoController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnApagar(Event ev) {
		mercadoCompetido.setFecmodif(Calendar.getInstance().getTime());
		mercadoCompetido.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		mercadoCompetido.setActivo(Boolean.TRUE);

		try {
			int opcao = Messagebox.show(
					Labels.getLabel("editarMercadoCompetidoController.btnFechar.MSG.Deseja.Borrar"),
					Labels.getLabel("editarMercadoCompetidoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (opcao == Messagebox.YES) {
				mercadoCompetidoService.borrar(mercadoCompetido);
				mercadoCompetidoList.removeItem(mercadoCompetido);

				Messagebox.show(
						Labels.getLabel("editarMercadoCompetidoController.btnFechar.MSG.BorrarOK"),
						Labels.getLabel("editarMercadoCompetidoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				closeWindow();
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}
}
