interface Templates {
	betslip: Template;
}

Template.betslip.onRendered(function() {
	this.autorun(() => {

		if(Users.Profile.active() && Users.Profile.active().siteSettings) {
			Session.setDefault('acceptOddsChanges', Users.Profile.active().siteSettings.acceptAllOdds);
			Session.setDefault('useQuickBet', Users.Profile.active().siteSettings.useQuickBet);
		}

		var betSlip = Betting.getBetSlip();

		if (!betSlip || !betSlip.length) {
			return;
		}

		this.subscribe('betting/Selection', {_id: {$in: betSlip.map((x) => x.selection)}});
		this.subscribe('betting/Market', {_id: {$in: betSlip.map((x) => x.marketId)}});
		this.subscribe('betting/Event', {_id: {$in: betSlip.map((x) => x.eventId)}});

		if (!betSlip.length) {
			Session.set('betslip-open', false);
		}

		// if (betSlip.length > 1) {
		// 	Betting.setMultibet(true);
		// }

	});
});

Template.betslip.helpers({

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

	bets: Betting.getBetSlip,

	isMulti: Betting.isMultibet,

	clearEnabled: Betting.clearAllowed,

	totalStake: Betting.getTotalStake,

	totalOdds: Betting.getTotalOdds,

	totalPotentialPayout: Betting.getPotentialPayout,

	betSlipState: Betting.getBetSlipState,

	betEnabled: function() {
		return Betting.placeBetAllowed();
	},

	millis: function(value) {
		return +(value * 1000).toFixed(2);
	},

	quickBets: function() {
		return [10, 25, 50, 100, 200, 500];
	},

	hasFunds(amount) {
		var balance = Math.floor(Rewards.userTotalBalance(Users.Profile.active()) * 100000) / 100;
		return balance >= amount;
	},

	oddsFormats: function () {
		return Users.oddsFormats;
	},

	betCount: function() {
		var betCount = Betting.getBetSlip().length;
		if (betCount == 1) {
			Betting.setMultibet(false);
		}
		return betCount;
	},

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

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

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

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

	disableBetslip: function() {
		return Session.get('disableBetslip') ? 'disabled' : '';
	},

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

});

Template.betslip.events({

	'click .title-holder': function(e: MeteorTemplateEvent) {
		e.preventDefault();
		e.stopPropagation();
		var footerVisible = Session.get('footerVisible');
		if (footerVisible) {
			Session.set('footerVisible', false);
			Session.set('betslip-open', false);
		}
		else {
			Session.set('footerVisible', true);
			Session.set('betslip-open', true);
		}
	},

	'click .multiBet, click .multiBet': function() {
		if (Betting.getBetSlip().length <= 1) {
			return;
		}
		Betting.setMultibet(true);
	},

	'click .singleBet, click .singleBet': function() {
		Betting.setMultibet(false);
	},

	'click .place-bet': function() {
		if (!Users.Profile.active()) {
			Session.set('betSlipError', {
				type: 'notLoggedIn',
				message: 'You have to be logged in'
			});
			return;
		}
		var balance = Math.floor(Rewards.userTotalBalance(Users.Profile.active()) * 100000) / 100;
		var stake = Betting.getTotalStake() * 1000;
		if (balance >= stake) {

			if (Session.get('useQuickBet')) {
				Session.set('disableBetslip', true);
				Betting.placeBet();
			}
			else {
				Session.set('confirmBet', true);
			}
		}
		else {
			Session.set('betSlipError', {
				type: 'notEnoughFunds',
				message: 'Not Enough Funds'
			});
			// Meteor.setTimeout(function() {
			// 	Session.set('notEnoughFunds', false);
			// }, 3000)
		}
	},

	'click .cancel-bet': function() {
		Session.set('confirmBet', false);
	},

	'click .confirm-bet': function() {
		if (Session.get('confirmBet')) {
			Betting.placeBet();
			Session.set('confirmBet', false);
			Session.set('disableBetslip', true);
		}
	},

	'click .clear-bet': function() {
		Session.set('betSlipError', false);
		Session.set('betslip-open', false);
		Betting.clearBetSlip();
		Betting.setMultiStake(0);
	},

	'click .inc-stake-10': function() {
		Session.set('betSlipError', false);
		Betting.setMultiStake(Betting.getTotalStake() ? ((Betting.getTotalStake() * 1000) + 10) : 10);

		// Meteor.setTimeout(function () {
		// 	validateBets();
		// }, 0);
	},

	'click .dec-stake-10': function() {
		Session.set('betSlipError', false);
		var curStake = Betting.getTotalStake() * 1000;
		if (curStake <= 0) {
			return;
		}

		var newStake = curStake - 10;
		if (newStake < 0) {
			newStake = 0;
		}

		// Meteor.setTimeout(function () {
		// 	validateBets();
		// }, 0);

		Betting.setMultiStake(newStake);
	},

	'click .inc-stake-50': function() {
		Session.set('betSlipError', false);
		// Meteor.setTimeout(function () {
		// 	validateBets();
		// }, 0);

		Betting.setMultiStake(Betting.getTotalStake() ? ((Betting.getTotalStake() * 1000) + 50) : 50);
	},

	'click .dec-stake-50': function() {
		Session.set('betSlipError', false);
		var curStake = Betting.getTotalStake() * 1000;
		if (curStake <= 0) {
			return;
		}

		var newStake = curStake - 50;
		if (newStake < 0) {
			newStake = 0;
		}

		// Meteor.setTimeout(function () {
		// 	validateBets();
		// }, 0);

		Betting.setMultiStake(newStake);
	},

	'keydown .stake-input, change .stake-input': function(e: MeteorTemplateEvent) {
		Session.set('betSlipError', false);
		var num = [48, 49, 50, 51, 52, 53, 54, 55, 56, 57];
		var numpad = [96, 97, 98, 99, 100, 101, 102, 103, 104, 105];
		var operational = [8, 16, 17, 18, 35, 36, 37, 39, 46, 91, 92, 93, 110, 188, 190];

		if (num.indexOf(e.which) === -1 && numpad.indexOf(e.which) === -1 && operational.indexOf(e.which) === -1) {
			e.preventDefault();
			e.stopPropagation();
		}
		Meteor.setTimeout(function () {
			Betting.setMultiStake(+$(e.target).val().replace(',', '.') || 0);
			// validateBets();
		}, 0);
	},

	'click .quick-dep': function() {
		Session.set('footerVisible', false);
		Pages.Page.go('/deposit');
	},

	'click .quick-edit': function() {
		Session.set('betSlipError', false);
	},

	'click .quick-login': function() {
		Session.set('footerVisible', false);
		Session.set('betSlipError', false);
		Pages.go('/login');
	},

	'click .quick-register': function() {
		Session.set('footerVisible', false);
		Session.set('betSlipError', false);
		Pages.go('/register');
	},

	'change #squaredOne': function () {
		Session.set('acceptOddsChanges', (Session.get('acceptOddsChanges') ? false : true));
		if(Users.Profile.active()) {
			Users.Profile.db.update({_id: Users.Profile.active()._id}, {
				$set: {
					'siteSettings.acceptAllOdds': Session.get('acceptOddsChanges'),
				}
			});
		}

	},

	'change #squaredOneQuickBet': function() {

		Session.set('useQuickBet', !Session.get('useQuickBet'));
		if(Users.Profile.active()) {
			Users.Profile.db.update({_id: Users.Profile.active()._id}, {
				$set: {
					'siteSettings.useQuickBet': Session.get('useQuickBet'),
				}
			});
		}
	}
});
