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

import java.util.HashMap;
import java.util.Map;

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.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Button;
import org.zkoss.zul.Caption;
import org.zkoss.zul.Menubar;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.api.Window;

import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.FlywayUtilService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.menu.ItemMenuSistema;
import com.rjconsultores.ventaboletos.web.utilerias.menu.MenuFactory;
import com.rjconsultores.ventaboletos.web.utilerias.menu.MenuFactoryPropertiesImpl;

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

	private static final long serialVersionUID = 1L;
	@Autowired
	private ConstanteService constanteService;
	@Autowired
	private FlywayUtilService flywayUtilService;
	private Usuario usuario;
	private Toolbarbutton toolBar;
	private Toolbarbutton toolBarUser;
	private Button toolBarSearch;
	private Menubar menubar;
	private Caption lblNombreAplicacion;
	private Window win;
	private HashMap<String, ItemMenuSistema> menuItems;

	private void cargarNombreAmbiente() {
		String strNombre = lblNombreAplicacion.getLabel();
		strNombre = strNombre + " - " + constanteService.buscarNombreAmbiente();
		if (flywayUtilService.existeErroExecucaoScript()){
			strNombre += " - FAVOR CHECAR A ATUALIZACAO";
		}
		
		lblNombreAplicacion.setLabel(strNombre);
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		cargarNombreAmbiente();

		usuario = UsuarioLogado.getUsuarioLogado();

		if (usuario == null) {
			toolBarUser.setVisible(Boolean.FALSE);
			toolBarSearch.setVisible(Boolean.FALSE);
			
			Execution exec = Executions.getCurrent();
		    String param = exec.getParameter("param");
		    
		    if(param != null) {
		    	Map args = new HashMap();
				args.put("login", param);

		    	openWindow("/recuperarSenha.zul", "Recuperar Senha", args, MODAL, Boolean.FALSE);
		    } else {
		    	openWindow("/login.zul", Labels.getLabel("winLogin.title"), arg, MODAL, Boolean.FALSE);
		    }

		} else {
			
			win.setCtrlKeys("^q");
			win.addEventListener(Events.ON_CTRL_KEY, new EventListener() {
			    @Override
			    public void onEvent(Event event) throws Exception {
			    	openSearchMenu(event);
			    }
			});

			toolBarUser.setVisible(Boolean.TRUE);
			toolBarUser.setLabel(usuario.getNombusuario());
			
			toolBarSearch.setVisible(Boolean.TRUE);

			if (usuario.getUsuarioPerfilList().isEmpty()) {
				return;
			}
			MenuFactory menuFactory = new MenuFactoryPropertiesImpl(desktop, usuario.getUsuarioPerfilList());
			menuFactory.construirMenu(menubar);
			menuItems = menuFactory.getMenuItems();

		}
	}

	public void onClick$toolBarSearch(Event ev) {
		openSearchMenu();
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public void onClick$toolBarUser(Event ev) {
		Map args = new HashMap();
		args.put("usuario", usuario);
		args.put("usuarioList", null);
		args.put("usrAdmin", Boolean.FALSE);

		openWindow("/gui/seguridad/editarUsuario.zul", Labels.getLabel("editarUsuarioController.window.title"), args, MODAL);
	}
	
	public void openSearchMenu(Event ev) {
		openSearchMenu();
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void openSearchMenu() {
		Map args = new HashMap();
		args.put("menuItems", menuItems);
		openWindow("/gui/catalogos/searchMenu.zul", Labels.getLabel("lb.btnPesquisa.label"), args, MODAL);
	}

	public HashMap<String, ItemMenuSistema> getMenuItems() {
		return menuItems;
	}

	public void setMenuItems(HashMap<String, ItemMenuSistema> menuItems) {
		this.menuItems = menuItems;
	}
	public Toolbarbutton getToolBar() {
		return toolBar;
	}

	public void setToolBar(Toolbarbutton toolBar) {
		this.toolBar = toolBar;
	}

	public Toolbarbutton getToolBarUser() {
		return toolBarUser;
	}

	public void setToolBarUser(Toolbarbutton toolBarUser) {
		this.toolBarUser = toolBarUser;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Button getToolBarSearch() {
		return toolBarSearch;
	}

	public void setToolBarSearch(Button toolBarSearch) {
		this.toolBarSearch = toolBarSearch;
	}
}
