package com.rjconsultores.ventaboletos.web.utilerias.menu.item.seguridad;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.Charset;

import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

public class ItemMenuPainelBPe extends DefaultItemMenuSistema {
	private static Logger log = LogManager.getLogger(ItemMenuPainelBPe.class);

	public ItemMenuPainelBPe() {
		super("indexController.mniPainelBpe.label");
	}

	@Override
	public String getClaveMenu() {
		return "COM.RJCONSULTORES.ADMINISTRACION.GUI.SEGURIDAD.MENU.PAINEL_BPE";
	}

	@Override
	public void ejecutar() {
		Usuario usuario = UsuarioLogado.getUsuarioLogado();

		ApplicationContext appContext = AppContext.getApplicationContext();
		ConstanteService constanteService = (ConstanteService) appContext.getBean("constanteService");

		String urlPainelBPe = constanteService.buscarURLPainelBPe();

		log.info(String.format("URL PainelBPe:%s - Usuario:%s", urlPainelBPe, usuario.getUsername()));

		if (StringUtils.isBlank(urlPainelBPe)) {
			Clients.alert(org.zkoss.util.resource.Labels.getLabel("painelbpe.message.naoconfigurado", 
					new Object[] { constanteService.buscarNomeConstanteURLPainelBPe() }),
					org.zkoss.util.resource.Labels.getLabel("painelbpe.title"), Messagebox.INFORMATION);
			return;
		}
		
		String password = null;
		
		try {
			password = URLEncoder.encode(usuario.getPassword(), Charset.forName("UTF-8").displayName());
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		urlPainelBPe = urlPainelBPe.endsWith("/") ? 
				String.format("%s%s/%s", urlPainelBPe, usuario.getUsuarioId(), password) : 
					String.format("%s/%s/%s", urlPainelBPe, usuario.getUsuarioId(), password);
		
		Executions.getCurrent().sendRedirect(urlPainelBPe, "_top");
	}

}
