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

import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Pricing;
import com.rjconsultores.ventaboletos.entidad.PricingMercado;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.PricingMercadoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import java.util.Calendar;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import java.util.List;
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.Combobox;

/**
 * 
 * @author Rafius
 */
@Controller("editarPricingMercadoController")
@Scope("prototype")
public class EditarPricingMercadoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private PricingMercadoService pricingMercadoService;
	@Autowired
	private ParadaService paradaService;
	private PricingMercado pricingMercado;
	private MyListbox pricingMercadoList;
	private Combobox cmbOrigen;
	private Combobox cmbDestino;
	private static Logger log = Logger.getLogger(EditarPricingMercadoController.class);

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

		pricingMercado = (PricingMercado) Executions.getCurrent().getArg().get("pricingMercado");
		pricingMercadoList = (MyListbox) Executions.getCurrent().getArg().get("pricingMercadoList");

		super.doAfterCompose(comp);

		if (pricingMercado.getPricingparadaId() != null) {
			Parada origem = pricingMercado.getOrigen();
			if (origem != null) {
				cmbOrigen.setText(origem.getDescparada());
			}

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

	public void onClick$btnAdicionarMercado(Event ev) throws Exception {
		cmbOrigen.getValue();
		cmbDestino.getValue();

		try {
			Parada origen = null;
			if (cmbOrigen.getSelectedItem() == null) {
				List<Parada> lsParadaOri = paradaService.buscar(cmbOrigen.getText().toUpperCase());
				if (!lsParadaOri.isEmpty()) {
					origen = lsParadaOri.get(0);
				}
			} else {
				origen = (Parada) cmbOrigen.getSelectedItem().getValue();
			}
			Parada destino = null;
			if (cmbDestino.getSelectedItem() == null) {
				List<Parada> lsParadaOri = paradaService.buscar(cmbDestino.getText().toUpperCase());
				if (!lsParadaOri.isEmpty()) {
					destino = lsParadaOri.get(0);
				}
			} else {
				destino = (Parada) cmbDestino.getSelectedItem().getValue();
			}
			// Parada destino = (Parada) cmbDestino.getSelectedItem().getValue();
			try {
				if (origen == null) {
					Messagebox.show(
							Labels.getLabel("MSG.Error.combobox.origen"),
							Labels.getLabel("editarPricingController.windowMercado.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				} else if (destino == null) {
					Messagebox.show(
							Labels.getLabel("MSG.Error.combobox.destino"),
							Labels.getLabel("editarPricingController.windowMercado.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				} else {
					Boolean existe =
							pricingMercadoService.obtenerPricingMercado(pricingMercado.getPricing(),
									origen, destino);

					pricingMercado.setOrigen(origen);
					pricingMercado.setDestino(destino);

					// id -1 identifica que é todas origens ou todos os destinos:
					if (origen.getParadaId().equals(-1) && destino.getParadaId().equals(-1)) {
						if (existe) {
							Messagebox.show(
									Labels.getLabel("MSG.Registro.Existe"),
									Labels.getLabel("editarPricingController.windowMercado.title"),
									Messagebox.OK, Messagebox.EXCLAMATION);
						} else {

							if (pricingMercado.getPricingparadaId() != null) {
								pricingMercadoService.actualizacion(pricingMercado);
								pricingMercadoList.updateItem(pricingMercado);
							} else {
								pricingMercadoService.suscribir(pricingMercado);
								pricingMercadoList.addItemNovo(pricingMercado);
							}

							closeWindow();
						}
					} else {
						if (origen.equals(destino)) {
							Messagebox.show(
									Labels.getLabel("editarPricingController.MSG.mercadoIguais"),
									Labels.getLabel("editarPricingController.windowMercado.title"),
									Messagebox.OK, Messagebox.EXCLAMATION);
						} else {
							if (existe) {
								Messagebox.show(
										Labels.getLabel("editarPricingController.MSG.mercadoExiste"),
										Labels.getLabel("editarPricingController.windowMercado.title"),
										Messagebox.OK, Messagebox.EXCLAMATION);
							} else {
								if (pricingMercado.getPricingparadaId() != null) {
									pricingMercadoService.actualizacion(pricingMercado);
									pricingMercadoList.updateItem(pricingMercado);
								} else {
									pricingMercadoService.suscribir(pricingMercado);
									pricingMercadoList.addItemNovo(pricingMercado);
								}

								closeWindow();
							}
						}
					}
				}
			} catch (Exception ex) {
				log.error("editarPricingController mercado:" + ex);
				Messagebox.show(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel("editarPricingController.windowCategoria.title"),
						Messagebox.OK, Messagebox.ERROR);
			}
		} catch (Exception ex) {
			log.error("Combobox PARADA " + ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMercado.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}
	}

	public void onClick$btnRemoverMercado(Event ev) {
		try {
			PricingMercado pMercado = (PricingMercado) pricingMercadoList.getSelected();
			if (pMercado != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarPricingController.MSG.borrarPerguntaMercado"),
						Labels.getLabel("editarPricingController.windowMercado.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {
					pricingMercado.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					pricingMercado.setFecmodif(Calendar.getInstance().getTime());
					pricingMercado.setActivo(Pricing.INATIVO);

					pricingMercadoList.removeItem(pricingMercado);
					pricingMercadoService.borrar(pricingMercado);
					closeWindow();
				}
			} else {
				Messagebox.show(
						Labels.getLabel("editarPricingController.MSG.selectItem"),
						Labels.getLabel("editarPricingController.windowMercado.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
		}

	}

	public PricingMercado getPricingMercado() {
		return pricingMercado;
	}

	public void setPricingMercado(PricingMercado pricingMercado) {
		this.pricingMercado = pricingMercado;
	}

	public MyListbox getPricingMercadoList() {
		return pricingMercadoList;
	}

	public void setPricingMercadoList(MyListbox pricingMercadoList) {
		this.pricingMercadoList = pricingMercadoList;
	}

	public PricingMercadoService getPricingMercadoService() {
		return pricingMercadoService;
	}

	public void setPricingMercadoService(PricingMercadoService pricingMercadoService) {
		this.pricingMercadoService = pricingMercadoService;
	}

	public ParadaService getParadaService() {
		return paradaService;
	}

	public void setParadaService(ParadaService paradaService) {
		this.paradaService = paradaService;
	}
}
