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

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

import org.apache.commons.lang.math.NumberUtils;
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.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.Grid;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Row;
import org.zkoss.zul.Spinner;

import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.Pais;
import com.rjconsultores.ventaboletos.service.EstadoService;
import com.rjconsultores.ventaboletos.service.PaisService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.RegistroConDependenciaException;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;

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

	private static final long serialVersionUID = 1L;
	@Autowired
	private EstadoService estadoService;
	@Autowired
	private PaisService paisService;
	private Estado estado;
	private List<Pais> lsPais;
	private MyListbox estadoList;
	private static Logger log = Logger.getLogger(EditarEstadoController.class);
	private MyTextbox txtNome;
	private Combobox cmbPais;
	private Button btnApagar;
	private Row rowEquivalencia;

	private Spinner tiempoHorHuso;

	private Radio sim;
	private Radio nao;
	private Grid hvFechor;
	private Grid hvTiempo;

	public void onCheck$sv1(Event ev) throws InterruptedException {

		if (sim.isChecked()) {
			hvFechor.setVisible(Boolean.TRUE);
			hvTiempo.setVisible(Boolean.TRUE);
		}
		if (nao.isChecked()) {
			hvFechor.setVisible(Boolean.FALSE);
			hvTiempo.setVisible(Boolean.FALSE);
		}
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public List<Pais> getLsPais() {
		return lsPais;
	}

	public void setLsPais(List<Pais> lsPais) {
		this.lsPais = lsPais;
	}

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

		lsPais = paisService.obtenerTodos();
		super.doAfterCompose(comp);

		estado = (Estado) Executions.getCurrent().getArg().get("estado");
		estadoList = (MyListbox) Executions.getCurrent().getArg().get("estadoList");

		if (estado.getEstadoId() == null) {
			btnApagar.setVisible(Boolean.FALSE);

			nao.setChecked(Boolean.TRUE);
			hvFechor.setVisible(Boolean.FALSE);
			hvTiempo.setVisible(Boolean.FALSE);

		} else {
			try {
				tiempoHorHuso.setValue(estado.getTiempoHorHuso());
			} catch (Exception e) {
			}

			if (estado.getFecInicioHorVerano() == null) {
				nao.setChecked(Boolean.TRUE);
				hvFechor.setVisible(Boolean.FALSE);
				hvTiempo.setVisible(Boolean.FALSE);
			} else {
				sim.setChecked(Boolean.TRUE);
				hvFechor.setVisible(Boolean.TRUE);
				hvTiempo.setVisible(Boolean.TRUE);
			}
		}

		if (!ApplicationProperties.getInstance().mostrarEquivalencia()) {
			rowEquivalencia.setVisible(Boolean.FALSE);
		}

		txtNome.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtNome.getValue();
		cmbPais.getValue();

		try {
			if (tiempoHorHuso.getValue() == null) {
				estado.setTiempoHorHuso(NumberUtils.INTEGER_ZERO);
			} else {
				estado.setTiempoHorHuso(tiempoHorHuso.getValue());
			}

			if (nao.isChecked()) {
				estado.setTiempoHorVerano(NumberUtils.INTEGER_ZERO);
				estado.setFecInicioHorVerano(null);
				estado.setFecFinoHorVerano(null);
			}

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

			List<Estado> lsEstado = estadoService.buscar(estado.getNombestado(), estado.getPais());

			boolean podeSalvar = false;
			if (lsEstado.isEmpty()) {
				podeSalvar = true;
			} else {
				if (estado.getEstadoId() == null) {
					podeSalvar = false;
				} else {
					for (Estado e : lsEstado) {
						if (e.getEstadoId().equals(estado.getEstadoId())) {
							podeSalvar = true;
						}
					}
				}
			}

			if (podeSalvar) {
				if (estado.getEstadoId() == null) {
					estadoService.suscribir(estado);
					estadoList.addItem(estado);
				} else {
					estadoService.actualizacion(estado);
					estadoList.updateItem(estado);
				}
				Messagebox.show(
						Labels.getLabel("editarEstadoController.MSG.suscribirOK"),
						Labels.getLabel("editarEstadoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				closeWindow();
			} else {
				Messagebox.show(
						Labels.getLabel("MSG.Registro.Existe"),
						Labels.getLabel("editarEstadoController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

		} catch (Exception ex) {
			log.error("editarEstadoController: " + ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarEstadoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagar(Event ev) throws InterruptedException {
		try {
			int resp = Messagebox.show(
					Labels.getLabel("editarEstadoController.MSG.borrarPergunta"),
					Labels.getLabel("editarEstadoController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {

				estadoService.borrar(estado);

				Messagebox.show(
						Labels.getLabel("editarEstadoController.MSG.borrarOK"),
						Labels.getLabel("editarEstadoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				estadoList.removeItem(estado);

				closeWindow();
			}
		} catch (RegistroConDependenciaException ex) {
			Messagebox.show(ex.getLocalizedMessage(), Labels.getLabel("editarEstadoController.window.title"), Messagebox.OK, Messagebox.ERROR);
		}
	}
}
