jQuery( window ).ready(function($) {
	var text = ""
	var cleanMessage = function(line, type="products"){
		text = "";
		$("#dk_core_sync_contents_"+type).html("");
	}
	var updateMessage = function(line, type="products"){
		text = text + "<p>" + line + "</p>";
		$("#dk_core_sync_contents_"+type).html(text);
	}

	var send_request = function(action,data={},callback){
		if(!data.page){
			data.page = {"number":1, "size": 10};
		}
		if(!data.fields){
			data.fields = "id";
		}
		
		data.action = action;
		// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
		$.post(ajaxurl, data, function(response) {
			
			callback(response);
		}).fail(function(e) {
			console.log(e);
			alert( "error" );
		});
	}

	var recursive_sync = function(endpoint, callback, type="products", page=1){
		send_request(endpoint,{page:page},function(response){
			updateMessage(response.data.mensagem,type);
			console.log(response.data);
			if(response.data.next_page){
				
				recursive_sync(endpoint, callback,type, response.data.next_page);
			}else{
				callback(response);
			}
		});
	}

	var sync_products = function(){
		cleanMessage();
		disableBtn("#dk_core_sync_products");
		updateMessage("Passo 1 de 4 - Começando sincronização de categorias ...");
		
		
		// Passo 1 Baixando Categorias
		recursive_sync("isp_product_category_view-sync",function(){
			// Passo 1 Baixando Tags
			updateMessage("Passo 2 de 4 - Começando sincronização de tags de produtos ...");
			recursive_sync("isp_product_tag_view-sync",function(){
				// Baixando Produtos
				updateMessage("Passo 3 de 4 - Começando sincronização de produtos ...");
				recursive_sync("isp_product_view-sync",function(){
					updateMessage("Passo 4 de 4 - Começando sincronização de cidades ...");
					recursive_sync("isp_city_view-sync",function(){
						enableBtn("#dk_core_sync_products");
						updateMessage("Sincronização Concluida 🥳");
					});
				});
			});
		});
		
	}

	/**
	 * Não estamos utilizando essa função
	 * Mas ela conta tudo
	 */
	var contar_tudo = function(callback) {
		var count = {'category':0,'tag':0,"prodct":0};
		var pages = {'category':0,'tag':0,"prodct":0};
		send_request("isp_product_category_view-list",{},function(response){
			count.category = response.meta.pagination.count;
			pages.category = response.meta.pagination.pages;
			updateMessage("Categorias para atualizar "+count.category+" total de pag. "+pages.category);
			
			// Contando Tags
			send_request("isp_product_tag_view-list",{},function(response){
				count.tag = response.meta.pagination.count;
				pages.tag = response.meta.pagination.pages;
				updateMessage("Tags para atualizar "+count.tag+" total de pag. "+pages.tag);
				
				// Contando Produtos
				send_request("isp_product_view-list",{},function(response){
					count.prodct = response.meta.pagination.count;
					pages.prodct = response.meta.pagination.pages;
					updateMessage("Produtos para atualizar "+count.prodct+" total de pag. "+pages.prodct);
					callback();
				});
			})
		})
	}


	var sync_canais = function(){
		cleanMessage("canais");
		//disableBtn("#dk_core_sync_canais");
		updateMessage("Passo 1 de 3 - Começando sincronização de categorias/grupos de canais ...", "canais");
		
		// Passo 1 Baixando Categorias
		recursive_sync("isp_channel_group_view-sync",function(){
			// Passo 1 Baixando Tags
			updateMessage("Passo 2 de 3 - Começando sincronização de tags/tipos de canais ...", "canais");
			recursive_sync("isp_channel_type_view-sync",function(){
				// Baixando Produtos
				updateMessage("Passo 3 de 3 - Começando sincronização de canais ...", "canais");
				recursive_sync("isp_channel_view-sync",function(){
					enableBtn("#dk_core_sync_products");
					updateMessage("Sincronização concluida 🥳", "canais");
				},"canais");
			},"canais");
		},"canais");

	}
	
	var disableBtn = function(id){
		$(id).prop("disabled",true);
	}

	var enableBtn = function(id){
		$(id).prop("disabled",false);
	}
	
	// Funções de Clique	
	$('#dk_core_sync_products').on('click',function(e){
		console.log("#dk_core_sync_products")
		e.preventDefault();
		sync_products();
		
		
		
	});
	$('#dk_core_sync_canais').on('click',function(e){
		e.preventDefault();
		console.log("Sincronizar Canais")
		sync_canais();
	});

});

	


