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

interface Templates {
	login: Template;
}

Template.login.onCreated(function() {
	this.setVar('useGoogleAuth', '');
});

Template.login.helpers({

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

});

Template.login.events({

	'change #squaredOne': function () {
		Session.set('showGoogleAuth', (Session.get('showGoogleAuth') ? false : true));
	},

	'submit form': function (e: MeteorTemplateEvent) {
		e.preventDefault();
		var $form = $(e.target);
		var data = $form.serializeObject();
		var errorContainer = $form.find('.generalError');
		errorContainer.html('');
		errorContainer.hide();

		if (!data.otpCode && data.useGoogleAuth) {
			errorContainer.append('<li>Please enter Google authenticator code</li>');
			errorContainer.show();
			$form.find('input[name="otpCode"]').anim('shake');
			return;
		}

		Otp.loginWithPassword('sportsbet+' + data.username, data.password, data.otpCode == undefined ? '' : data.otpCode, function(err?) {
			Session.set('loading', false);
			if (err) {

				googleSend({
					'eventCategory': 'Login',
					'eventAction': 'Login Error',
					'pageEventArea': 'Main'
				});

				if (err.details == 'passwordRequired') {
					errorContainer.append('<li>Your account has 2-step verification enabled. Please enter the Google Authenticator Code below.</li>');
					errorContainer.show();
					Session.set('showGoogleAuth', true);
					$("[name='otpCode']").anim('shake');
					return;
				}
				else if (err.details == 'wrongPassword') {
					errorContainer.append('<li>Wrong Google Authenticator Code.</li>');
					errorContainer.show();
					Session.set('showGoogleAuth', true);
					$("[name='otpCode']").anim('shake');
					return;
				}
				else if (err.details == 'otpNotEnabled') {
					errorContainer.append('<li>You do not have OTP enabled.</li>');
					errorContainer.show();
					Session.set('showGoogleAuth', false);
					$("[name='otpCode']").val('');
					return;
				}
				else if (err.details == 'userDisabled') {
					errorContainer.append('<li>Account is closed.</li>');
					errorContainer.show();
					return;
				}
				else {
					$form.anim('shake');
					errorContainer.append('<li>Incorrect username or password</li>');
					errorContainer.show();
					return;
				}
			}

			Session.set('betSlipError', false);
			Meteor.call('Fraud/getDeviceInfo', (err, res) => {
				if (err) {
					return;
				}
				Meteor.call('Fraud/LoginLookup', res);
			});
			(<HTMLFormElement> $form[0]).reset();

			Meteor.apply('customerIoEvent', ['login']);

			googleSend({
				'eventCategory': 'Login',
				'eventAction': 'Logged In',
				'pageEventArea': 'Main'
			}, true);

		});

	},

	'click .forgot-password': function() {
		googleSend({
			'eventCategory': 'Login',
			'eventAction': 'Clicked Forgot Password',
			'pageEventArea': 'Main'
		});

		googleSend({
			'eventCategory': 'UP Recovery',
			'eventAction': 'Started Password Recovery',
			'pageEventArea': 'Main'
		});
	}
	
});
