/// <reference path=".#ts/server.d.ts" />

var p = pages.subs;
var siteMap = [];
var Default = {
	changefreq: 'Daily',
	priority: 1
};

for (var key in p) {
	if (p.hasOwnProperty(key)) {
		var page = p[key];
		var href = page.href;
		var subPages = page.subs;

		if (page.inSitemap == false) {
			continue;
		}

		siteMap.push({
			page: href,
			changefreq: page.changefreq ? page.changefreq : Default.changefreq,
			priority: page.priority ? page.priority : Default.priority
		});

		if (subPages) {
			for (var subkey in subPages) {
				if (subPages.hasOwnProperty(subkey)) {
					var subpage = subPages[subkey];

					if (subpage.inSitemap == false) {
						continue;
					}

					siteMap.push({
						page: subpage.href,
						changefreq: subpage.changefreq ? subpage.changefreq : Default.changefreq,
						priority: subpage.priority ? subpage.priority : Default.priority
					});
				}
			}
		}

	}
}

/**
 * Game urls
 */
var menu = Casino.MenuItem.db.find({site: 'Mr7ntp9ATnPpNco7t'}).fetch();
menu.forEach(function (m) {

	siteMap.push({
		page: m.href(),
		changefreq: 'Weekly',
		priority: 1
	});

	// Find games for the menu items
	var games = Casino.Game.db.find({
		active: true,
		//type: Casino.GameType.DESKTOP,
		"siteSettings.bitcasino.menuItem": m._id,
		"siteSettings.bitcasino.active": true
	}).fetch();

	//console.log('sitemaps.ts 63', m.name, games.length);

	games.forEach(function (game: Casino.Game) {
		siteMap.push({
			//page: href + '/' + m.name.replace(/\s+/g, '-').toLowerCase() + '/' + game.name.replace(/\s+/g, '-'),
			page: '/casino/' + game.href(),
			changefreq: 'Monthly',
			priority: 0.6
		});
		if (!game.disableFunGames) {
			siteMap.push({
				page: '/casino/' + game.href() + '/fun',
				changefreq: 'Monthly',
				priority: 0.6
			});
		}

	});

});

/**
 * Content module urls
 */
var contentPages = Content.Page.db.find({
	site: 'Mr7ntp9ATnPpNco7t',
	device: Content.Device.DESKTOP,
	language: Countries.Lang.en,
	publishDate: {$lt: new Date},
	'section.handle': {$in: ['promotions', 'about', 'bitcoin-info']}

}).fetch();

contentPages.forEach(function (p: Content.Page) {
	siteMap.push({
		page: p.href(),
		changefreq: (<any>p).changefreq ? (<any>p).changefreq : 'Weekly',
		priority: (<any>p).priority ? (<any>p).priority : 0.8
	});
});

/**
 * Prelive sporting events
 */
var categories = Betting.Category.db.find({eventCount: {$gt: 0}, level: 0}, {sort: {orderNr: 1}});
categories.forEach(function (category) {
	addCategoryToSitemap(category);
});


function addCategoryToSitemap (category) {
	var url = '/sports/pre-live/' + category.makeSeoString() + '/events/' + category._id;
	siteMap.push({
		page: url,
		changefreq: 'Daily',
		priority: 0.8
	});
	addEventsToSitemap(category);
	if (category.children.count()) {
		category.children.fetch().forEach(function (child) {
			if (!(child.eventCount > 0)) {
				return;
			}
			addCategoryToSitemap(child);
		});
	}
};

function addEventsToSitemap(category) {
	category.openEvents().forEach(function(event) {
		if (event.marketCount > 0 && moment(event.startTime) > moment()) {
			try {
				var url = '/sports/pre-live/' + event.makeSeoString() + '/event/' + event._id;
				siteMap.push({
					page: url,
					changefreq: 'Daily',
					priority: 0.8
				});
			}
			catch (e) {
				Logger.error('Sitemap add events error', e);
			}
		}
	});
}

sitemaps.add('/sitemap.xml', function () {
	return siteMap;
});