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

interface Templates {
	lotteryInfo: Template;
}

var winnersDep: {dep: Tracker.Dependency} = {
	dep: new Tracker.Dependency()
};


Template.lotteryInfo.helpers({

	showEventDescription: function(){
		counterApi.dep.depend();
		return !(<Lotteries.LotteryInstance>this).drawn && moment((<Lotteries.LotteryInstance>this).drawDate).diff(moment(), 'seconds') <= 0;
	},

	prevInstances: function(){
		if(Session.get('lotteryInstance')) return;
		return Lotteries.LotteryInstance.db.find({handle: Session.get('lotteryHandle'), active: false}, {limit: 6});
	},

	lottery: function(){
		var lotteryInstance;
		if(Session.get('lotteryInstance')){
			lotteryInstance = Lotteries.LotteryInstance.db.findOne({_id: Session.get('lotteryInstance')});
		}else {
			lotteryInstance = Lotteries.LotteryInstance.db.findOne({handle: Session.get('lotteryHandle')});
		}

		return lotteryInstance;
	},

	showResult: function(){
		return (<Lotteries.LotteryInstance>this).isLotto() && Session.get('lotteryInstance');
	},

	prizes: function(){
		if((<Lotteries.LotteryInstance>this).prizePoolType == Lotteries.PrizePoolType.FIXED) {
			var pp = (<Lotteries.LotteryInstance>this).prizePool;
			_.each((<Lotteries.LotteryInstance>this).prize, function (p:Lotteries.Prize) {
				if (p.type == Lotteries.PrizeType.MONETARY) {
					var prize = pp * p.percentage / 100;
					p.amount = <any>prize.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
				}
			})
		}
		return (<Lotteries.LotteryInstance>this).prize;
	},

	winners: function(){
		winnersDep.dep.depend();
		return (<any>Template.instance()).winners

	},

	ticketsOwned: function(){
		return Lotteries.Ticket.db.find({lotteryInstance: (<Lotteries.LotteryInstance>this)._id}).count();
	},

	totalTickets: function(){
		var self = <Lotteries.LotteryInstance>this;
		Meteor.call('lotteries-admin/Tickets/total', {lotteryInstance: self._id}, function (err, res) {
			Session.set('totalTickets'+self._id, res);
		});
		return Session.get('totalTickets'+self._id);
	}

});

Template.lotteryInfo.events({

});

Template.lotteryInfo.created = function () {




	var selector = <any>{
		handle: Session.get('lotteryHandle')
	};
	if(Session.get('lotteryInstance')){
		selector._id = Session.get('lotteryInstance');
	}

	var options = {sort: {drawDate: -1}, limit: 7};
	this.subscribe('Lotteries.LotteryInstance', selector, options);

	this.autorun(() => {
		var lotteryInstanceId;
		if(Session.get('lotteryInstance')) lotteryInstanceId = Session.get('lotteryInstance');
		else lotteryInstanceId = Lotteries.LotteryInstance.db.findOne() ? Lotteries.LotteryInstance.db.findOne()._id : false;
		if (lotteryInstanceId) {
			var tSelector = {
				lotteryInstance: lotteryInstanceId
			};
			var tOptions = {
				sort: {'acquired': -1},
				limit: 10
			};
			this.subscribe('Lotteries.Ticket', tSelector, tOptions);

			var self = this;
			Meteor.call('Lotteries/winners', lotteryInstanceId, function (err, res) {
				if (err) {
					Logger.error("lotteryInfo.ts: 50", err);
				}
				else {
					winnersDep.dep.changed();
					self.winners = res;
				}
			});
		}
	})

};


