interface Templates {
	sportsBrowseCategory: Template;
}

Template.sportsBrowseCategory.onCreated(function() {
	disableSite();
});

Template.sportsBrowseCategory.onRendered(function() {

	var categoriesSub;
	this.autorun(() => {
		categoriesSub = this.subscribe('betting/Category', {_id: Session.get('opened-category')}, {}, ['parent', 'parent.parent']);
	});

	this.autorun(() => {
		if (!categoriesSub.ready()) {
			return;
		}
		let category = Betting.Category.db.findOne({_id: Session.get('opened-category')});
		if (!category) {
			return;
		}

		let root = category.root();
		if (!root) {
			return;
		}

		let categoryConstrucor = {
			$or: [
				{liveEventCount: {$gt: 0}},
				{eventCount: {$gt: 0}}
			]
		};
		let categoryOptions = {
			fields: {
				name: 1,
				children: 1,
				competitions: 1,
				isFeatured: 1,
				parent: 1
			}
		};

		this.subscribe('betting/Category', {parent: root._id},  {sort: {name: 1}}, [
			{
				name: 'children',
				selector: categoryConstrucor,
				options: categoryOptions
			},
			{
				name: 'children.children',
				selector: categoryConstrucor,
				options: categoryOptions
			},
			{
				name: 'children.children.children',
				selector: categoryConstrucor,
				options: categoryOptions
			}
		], function() { enableSite(); });
	});

});

Template.sportsBrowseCategory.helpers({

	categories: function() {
		let activeCategory = Betting.Category.db.findOne({_id: Session.get('opened-category')});
		if (!activeCategory) {
			return;
		}
		let rootCategory = activeCategory.root();
		return Betting.Category.db.find({
			parent: rootCategory._id,
			$or: [
				{isFeatured: false},
				{isFeatured: {$exists: false}}
			]
		}, {sort: {name: 1}}).fetch();
	}

});

Template.sportsBrowseCategory.events({

	'click .menu a': function(e: MeteorTemplateEvent) {
		e.stopPropagation();
		var row = $(e.currentTarget);

		if (row.hasClass('all')) {
			$('#navTabs a[href="#upcoming"]').tab('show');
			Pages.go(`/sportsbook/pre-live/${this.makeSeoString()}/events/${this[0].parent.id}`);
		}
		else {
			if (this.children.count()) {
				var children = row.next().children();
				if (children.hasClass('hidden')) {
					children.removeClass('hidden');
					row.find('span').addClass('expanded');
				}
				else {
					row.find('span').removeClass('expanded');
					children.addClass('hidden');
				}
			}
			else {
				$('#navTabs a[href="#upcoming"]').tab('show');
				Pages.go(`/sports/pre-live/${this.makeSeoString()}/events/${this._id}`);
			}
		}
	},

	'click #tab-upcoming': function() {
		let category = Betting.Category.db.findOne({_id: Session.get('opened-category')});
		Pages.go('/sports/pre-live/' + category.makeSeoString() + '/events/' + category._id);
	}

});