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

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.util.resource.Labels;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.web.utilerias.api.ApiCallRunnable;
import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

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

	public ItemMenuLimparCacheEmbarcadaAPI() {
		super("indexController.mniLimparCacheEmbarcadaAPI.label");
	}

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

	@Override
	public void ejecutar() {

		try {

			int resp = Messagebox.show(
					Labels.getLabel("limparCacheEmbarcadaAPI.message.pergunta"),
					Labels.getLabel("limparCacheEmbarcadaAPI.title"), Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {

				String[] urls = getURLSAPI();

				if (urls == null || urls.length == 0) {
					Clients.alert(org.zkoss.util.resource.Labels.getLabel("limparCacheEmbarcadaAPI.message.naoconfigurado"),
							org.zkoss.util.resource.Labels.getLabel("limparCacheEmbarcadaAPI.title"), Messagebox.INFORMATION);
					return;
				}

				for (String url : urls) {

					if (StringUtils.isBlank(url) || url.contains("|")) {
						Clients.alert(org.zkoss.util.resource.Labels.getLabel("limparCacheEmbarcadaAPI.message.naoconfigurado"),
								org.zkoss.util.resource.Labels.getLabel("limparCacheEmbarcadaAPI.title"), Messagebox.INFORMATION);
						return;
					}

					String tenant = StringUtils.substringBetween(url, "[", "]");
					if (tenant != null) {
						url = url.replaceAll("\\[.*?\\]", "");
					}
					String urlBase = url;
					url = montarUrlRequest(url);

					ApiCallRunnable cache = new ApiCallRunnable(url, tenant, urlBase);
					Thread thread = new Thread(cache);
					thread.start();
					thread.join();

					Clients.alert(cache.getRetorno(), org.zkoss.util.resource.Labels.getLabel("limparCacheEmbarcadaAPI.title"), Messagebox.INFORMATION);
				}

			}

		} catch (Exception e) {
			Clients.alert(e.getMessage(),
					org.zkoss.util.resource.Labels.getLabel("limparCacheEmbarcadaAPI.title"), Messagebox.ERROR);
			log.error(e.getMessage(), e);
		}

	}

	private String montarUrlRequest(String url) {

		url = url.toLowerCase();

		if (!url.endsWith("/")) {
			url += "/";
		}

		return url.concat("adm/limparCacheSincronizacaoTramos");
	}

	private String[] getURLSAPI() {
		ApplicationContext appContext = AppContext.getApplicationContext();
		ConstanteService constanteService = (ConstanteService) appContext.getBean("constanteService");
		String constante = constanteService.buscarURLAPIEmb();
		
		if (StringUtils.isBlank(constante)){
			log.debug("Não foi encontrado a constante específica para a API da Embarcada. Será buscado o endereço da api de Venda");
			
			constante = constanteService.buscarURLAPI();
		}

		return constante == null ? null : constante.split("\\|");
	}
	
}
