
var PrimeNews = {

    //.section-primenews
    //.primenews-hoveritem

    // data-newscat|societe

    local_allcats:null,
    local_newsbycats:null,
    selected_category: [],

    current_category: false,

    data: [],
    all_categories:[],
    selected_items: [],

    primenewsContainer:false,
    section_open: false,
    elementModalNews: false,
    elementModalNewsBg: false,

    mouseInSection: false,

    init: function() {
		var self = this;

        if( self.local_allcats == null ) {
            self.local_allcats = self.getWithExpiry('gaboteur-news-categories2');
        }

        if( self.local_allcats == null ) {
            this.fetch_data(function(data) {	
                self.all_categories = data.all_categories;
                self.local_allcats = self.all_categories;
                self.setWithExpiry('gaboteur-news-categories2', self.all_categories, 1000*3600*24);
            }, 0);
        }
        else {
            self.all_categories = self.local_allcats;
        }	
        self.initEvents();
    },


    createAdditionalSection: function() {
        var self = this;
        var primeNewsSection = document.createElement("div");
        primeNewsSection.classList.add('primenews-container');        
        jQuery('.section-primenews').append(primeNewsSection);
    },
    updateItemsUI: function() {

        var coreContainer = jQuery('.section-primenews .primenews-container');

        //console.log(this);
        // liste de nouvelles
        var newsCol = document.createElement("div");
        jQuery(newsCol).addClass('primenews-items');
        for(var i=0; i<this.selected_items.news.length;i++) {
            nouvelle = this.selected_items.news[i];

            var newsContainer = document.createElement("div");
            jQuery(newsContainer).addClass('primenews-item');
                
            var modalImage = document.createElement("img");
            modalImage.setAttribute('src', nouvelle.thumbnail);

            var title = document.createElement("h4");        
            jQuery(title).text(nouvelle.name);       


            var url = document.createElement("a");   
            jQuery(url).attr('href', nouvelle.url);            
            jQuery(url).append(modalImage);
            jQuery(url).append(title);
            
            jQuery(newsContainer).append(url);

            newsCol.append(newsContainer);
        }   
        coreContainer.append(newsCol);
    },
    updateUI: function() {   
        var coreContainer = jQuery('.section-primenews .primenews-container');
        coreContainer.html("");
        
        // categories de nouvelles
        var catsCol = document.createElement("div");
        jQuery(catsCol).addClass('primenews-cats');

        
        var subcats = [];
        var url_cat = false;
        var title_cat = '';
        for(var i=0;i<this.all_categories.length;i++) {
            if( this.all_categories[i].slug == this.current_category ) {
                subcats = this.all_categories[i].subcats;
                url_cat = this.all_categories[i].url;
                title_cat = this.all_categories[i].name;
            }
        }        
        
        var catsContainer = document.createElement("ul");
        catsCol.append(catsContainer);
        for(var i=0; i<subcats.length;i++) {
            category = subcats[i];                

            var listItem = document.createElement("li");            

            var url = document.createElement("a");   
            jQuery(url).attr('href', category.url);   
            jQuery(url).text(category.name);

            jQuery(listItem).append(url);
            jQuery(catsContainer).append(listItem);
        }            

        // add arrow to navigate to cat
        var cat_url = document.createElement("a");   
        jQuery(cat_url).attr('href', url_cat);     
        jQuery(cat_url).addClass('button-gotocat'); 
        var span = '<span>'+title_cat+'</span>';    
        jQuery(cat_url).append(span+'&nbsp; <i aria-hidden="true" class="fas fa-long-arrow-alt-right"></i>');        
        jQuery(catsContainer).append(cat_url);

        coreContainer.append(catsCol);

        if( this.selected_items.length == 0 ) {	
            // show loader
            var loaderCol = document.createElement("div");
            jQuery(loaderCol).addClass('primenews-loader');
            var loader = 'loader';
            var loader = document.createElement("img");
            loader.setAttribute('src', '/wp-content/themes/gaboteur/vendor/loader.svg');

            loaderCol.append(loader);
            coreContainer.append(loaderCol);
        }
    },
    initEvents: function() {
		var self = this;        
	    jQuery(".primenews-hoveritem").hoverIntent( function () {

            jQuery('.primenews-hoveritem').removeClass('menu-active'); 
            jQuery(this).addClass('menu-active');
            var selected_cat = jQuery(this).data('newscat');

            if( selected_cat != self.current_category ) {
                self.current_category = selected_cat;

                if( self.selected_category[selected_cat] !== undefined ) {
                    self.selected_items = self.selected_category[selected_cat];
                    self.updateDisplay();           
                    self.updateItemsUI();  
                }
                else {
                    var inquired_news = self.getWithExpiry('gaboteur-news-items2-'+selected_cat);   
                    //console.log(inquired_news);
                    if( inquired_news == null ) {
                                                
                        self.selected_items = [];
                        self.updateDisplay();              
                        self.fetch_data(function(data) {			
                            self.setWithExpiry('gaboteur-news-items2-'+selected_cat, data, 1000*900);
                            self.selected_items = data;
                            self.selected_category[selected_cat] = data;
                            jQuery('.primenews-loader').remove();
                            self.updateItemsUI();        
                        }, selected_cat);
                    }	
                    else {     

                        self.selected_category[selected_cat] = inquired_news;
                        
                        self.selected_items = inquired_news;
                        self.updateDisplay();           
                        self.updateItemsUI();  
                    }
                }
            
                
            }
                
        } );
        
    },

    updateDisplay: function() {

        if( !this.section_open ) {
            this.createAdditionalSection();
            this.updateUI();
            this.section_open = true;
        }
        else {
            this.updateUI();  
        }
    },
    
    fetch_data: function(_callback, category) {
		jQuery.ajax({
			url: childdata.ajax_url,
			data: {
				action:'get_news',
                cat:category
			},   
			success: function(response){				
				var obj = jQuery.parseJSON(response);	
				if( obj.type == "success" ) {
					_callback(obj.data);
				}
			}, 
			error: function(data) {
				//console.log("error projects ajax");
			}
		});
	},

    setWithExpiry : function (key, value, ttl) {
        var now = new Date();
    
        // `item` is an object which contains the original value
        // as well as the time when it's supposed to expire
        var item = {
            value: value,
            expiry: now.getTime() + ttl,
        }
        window.localStorage.setItem(key, JSON.stringify(item));
        //console.log("saved with key:" +key);
    },
    getWithExpiry: function (key) {
        var itemStr = window.localStorage.getItem(key);
        //console.log("Found by key: " + key);
        //console.log(itemStr);
        // if the item doesn't exist, return null
        if (!itemStr) {
            return null;
        }
        var item = JSON.parse(itemStr);
        var now = new Date();
        // compare the expiry time of the item with the current time
        if (now.getTime() > item.expiry) {
            // If the item is expired, delete the item from storage
            // and return null
            window.localStorage.removeItem(key);
            return null;
        }
        return item.value;
    }

};