/*
 * 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.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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.Nodo;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.TipoParada;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.NodoService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.TipoParadaService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.RegistroConDependenciaException;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxCiudad;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

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

	private static final long serialVersionUID = 1L;

	@Autowired
	private ParadaService paradaService;
	@Autowired
	private TipoParadaService tipoParadaService;
	@Autowired
	private NodoService nodoService;
	private Parada parada;
	private MyListbox paradaList;
	private static Logger log = Logger.getLogger(EditarCatalogoDeParadaController.class);
	private Textbox txtNome;
	private Textbox cveparada;
	private MyComboboxCiudad cmbCiudad;
	private Combobox cmbTipoParada;

	private List<TipoParada> lsTipoParadas;
	private List<Nodo> lsNodo;
	private Button btnApagar;
	private Intbox codAntt;

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

		parada = (Parada) Executions.getCurrent().getArg().get("parada");
		paradaList = (MyListbox) Executions.getCurrent().getArg().get("paradaList");

		lsTipoParadas = tipoParadaService.obtenerTodos();
		lsNodo = nodoService.obtenerTodos();

		if (parada.getParadaId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		} else {
			Ciudad ciudad = parada.getCiudad();
			if (ciudad != null) {
				cmbCiudad.setText(ciudad.getNombciudad());
			}
		}

		txtNome.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtNome.getValue();
		cveparada.getValue();
		cmbCiudad.getValue();
		cmbTipoParada.getValue();
		codAntt.getValue();
		
		if (!validaNome()){
			Messagebox.show(
					Labels.getLabel("editarCatalogoDeParadaController.MSG.nomeInvalido"),
					Labels.getLabel("editarCatalogoDeParadaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}

		try {
			Nodo nodoCentral = lsNodo.get(0);			
			parada.setNodo(nodoCentral);
			
			cmbCiudad.getValue(parada.getParadaId() == null);
			paradaService.suscribirActualizar(parada);

			paradaList.updateItem(parada);

			Messagebox.show(
					Labels.getLabel("editarCatalogoDeParadaController.MSG.suscribirOK"),
					Labels.getLabel("editarCatalogoDeParadaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();
		} catch (BusinessException ex) {
			Messagebox.show(
					ex.getLocalizedMessage(),
					Labels.getLabel("editarCatalogoDeParadaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

		}
	}

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

			if (resp == Messagebox.YES) {

				paradaService.borrar(parada);

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

				paradaList.removeItem(parada);

				closeWindow();
			}
		} catch (RegistroConDependenciaException ex) {
			Clients.alert(
					ex.getLocalizedMessage(),
					Labels.getLabel("editarCatalogoDeParadaController.window.title"),
					Messagebox.INFORMATION);
		} catch (Exception ex) {
			log.error(ex);
			Clients.alert(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarCatalogoDeParadaController.window.title"),
					Messagebox.INFORMATION);
		}
	}

	public List<Nodo> getLsNodo() {
		return lsNodo;
	}

	public void setLsNodo(List<Nodo> lsNodo) {
		this.lsNodo = lsNodo;
	}

	public List<TipoParada> getLsTipoParadas() {
		return lsTipoParadas;
	}

	public void setLsTipoParadas(List<TipoParada> lsTipoParadas) {
		this.lsTipoParadas = lsTipoParadas;
	}

	public Parada getParada() {
		return parada;
	}

	public void setParada(Parada parada) {
		this.parada = parada;
	}

	public boolean validaNome(){
		if (!ApplicationProperties.getInstance().validaEstadoNoNomeLocalidade()){
			return true;
		}
		boolean isValid = false;
		for (EstadosBrasilEnum e : EstadosBrasilEnum.values()) {
			if (txtNome.getValue().contains("- " + e.toString())){
				isValid = true;
				break;
			}
		}
		return isValid;
	}
	public enum EstadosBrasilEnum {
		 AC, // Acre
		 AL, // Alagoas
		 AP, // Amapá
		 AM, // Amazonas
		 BA, // Bahia
		 CE, // Ceará
		 DF, // Distrito Federal
		 ES, // Espírito Santo
		 GO, // Goiás
		 MA, // Maranhão
		 MT, // Mato Grosso
		 MS, // Mato Grosso do Sul
		 MG, // Minas Gerais
		 PA, // Pará
		 PB, // Paraíba
		 PR, // Paraná
		 PE, // Pernambuco
		 PI, // Piauí
		 RR, // Roraima
		 RO, // Rondônia
		 RJ, // Rio de Janeiro
		 RN, // Rio Grande do Norte
		 RS, // Rio Grande do Sul
		 SC, // Santa Catarina
		 SP, // São Paulo
		 SE, // Sergipe
		 TO // Tocantins
		}
}
