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

interface Templates {
	lotteries: Template;
}

Template.lotteries.helpers({

	lotteries: function () {
		var selector = <any>{};
		var options = <any>{};
		selector = _.extend(selector, Session.get('lotteryFilter'));

		if(Session.get('showHistory')){
			selector.drawDate = {$lt: new Date()};
			options.limit = 50;
			options.sort = {drawn: -1};
		}
		else{
			options.sort = {drawDate: 1};
		}

		return Lotteries.LotteryInstance.db.find(selector, options);
	},

	usableTickets: function () {
		return Session.get('usableTickets');
	},

	showHistory: function () {
		return Session.get('showHistory');
	},

	showLocked: function() {
		var filter = Session.get('lotteryFilter');
		if (!filter) {
			return;
		}
		return filter.locked;
	},

	showAll: function() {
		var filter = Session.get('lotteryFilter');
		if (!filter || !filter.locked) {
			return true;
		}
		return false;
	}

});

Template.lotteries.events({
	'click .filterAll': function () {
		Session.set('lotteryFilter', {});
	},
	'click .filterLocked': function () {
		Session.set('lotteryFilter', {locked: true});
	},
	//'click .filterLotto': function () {
	//	Session.set('lotteryFilter', {type: {$in: [Lotteries.LotteryType.LOTTO_AUTO, Lotteries.LotteryType.LOTTO_AUTO_FILL, Lotteries.LotteryType.LOTTO_MANUAL]}});
	//},
	//'click .filterRaffle': function () {
	//	Session.set('lotteryFilter', {type: {$in: [Lotteries.LotteryType.RAFFLE_AUTO, Lotteries.LotteryType.RAFFLE_MANUAL]}});
	//}
});

Template.lotteries.rendered = function() {
	//var lottery = Lotteries.LotteryInstance.db.find({});

	this.autorun(() => {

		if (!Session.get('fillLottery')) {
			return;
		}

		if (Users.Profile.active()) {
			var lotteryIds = Lotteries.LotteryInstance.db.find().fetch().map(function (l) {
				return l._id
			});
			if (lotteryIds) {
				var instance = Lotteries.LotteryInstance.db.findOne({_id: lotteryIds[0]});
				if (instance) {
					var ticket = instance.tickets.fetch({numbers: {$exists: false}})[0];
					if (ticket) {
						Session.set('opened-modal', 'fillTicketModal');
						Modals.open('fillTicketModal', ticket);
					}
				}
			}
		}
	});

}

Template.lotteries.onCreated(function(){

	Meteor.setInterval(function(){
		counterApi.dep.changed();
	}, 1000);

	this.autorun(() => {
		var selector = <any>{active: true, drawDate: {$gt: new Date()}};
		var options = <any>{sort: {drawDate: 1}};

		if(Session.get('showHistory')){
			delete selector.active;
			selector.drawDate = {$lt: new Date()};
			options.limit = 50;
		}
		selector = _.extend(selector, Session.get('lotteryFilter'));

		this.subscribe('Lotteries.LotteryInstance', selector, options);
		this.subscribe('Lotteries.Ticket', {lotteryInstance: {$exists: false}});

		var usableTicketCount = Lotteries.Ticket.db.find({lotteryInstance: {$exists: false}}).count();
		Session.set('usableTickets', usableTicketCount);

		if (Users.Profile.active()) {
			var lotteryIds = Lotteries.LotteryInstance.db.find().fetch().map(function (l) {
				return l._id
			});
			if (lotteryIds) {
				this.subscribe('Lotteries.Ticket', {lotteryInstance: {$in: lotteryIds}});
			}
		}
	});
});
