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

interface Templates {
	forgotPassword: Template;

}

Template.forgotPassword.helpers({

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

	errors: function() {
		return Users.Profile.db.errors('register');
	},

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

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

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

	useGoogleAuth: function () {
		return Session.get('showGoogleAuth') ? 'checked' : null;
	}

});

Template.forgotPassword.onDestroyed(function () {
	Session.set('resetToken', undefined)
});

Template.forgotPassword.events({

	'click .useGoogleAuth': function (e: MeteorTemplateEvent, t: MeteorTemplate) {
		e.preventDefault();
		var checkbox = t.find('#useGoogleAuth');
		var isChecked = checkbox.hasAttribute('checked');
		if (isChecked) {
			checkbox.removeAttribute('checked');
		}
		else {
			checkbox.setAttribute('checked', 'checked');
		}
		Session.set('showGoogleAuth', isChecked ? false : true);
	},

	'submit form[name="login"]': function (e: MeteorTemplateEvent) {
		e.preventDefault();
		var tpl = Template.instance();
		var $form = $(e.target);
		var $emailField = $form.find('#email');
		var data = $form.serializeObject();
		var errorContainer = $form.find('.generalError');
		errorContainer.html('');
		errorContainer.hide();

		if (!data.email) {
			$emailField.anim('shake');
			googleSend({
				'eventCategory': 'UP Recovery',
				'eventAction': 'Email Verification Error',
				'eventLabel': 'Empty',
				'pageEventArea': 'Main'
			});
			return;
		}

		Session.set('loading', true);
		Users.User.forgotPassword(data.email, function (err?) {
			if (err) {
				Session.set('loading', false);
				$emailField.anim('shake');
				if (err.error == '404') {
					errorContainer.append('<li>No user was found with this email</li>');
				}
				errorContainer.show();
				googleSend({
					'eventCategory': 'UP Recovery',
					'eventAction': 'Email Verification Error',
					'eventLabel': 'Email Not Found',
					'pageEventArea': 'Main'
				});
				return;
			}
			Session.set('loading', false);
			tpl.setVar('tokenSent', true);

			googleSend({
				'eventCategory': 'UP Recovery',
				'eventAction': 'Email Sent',
				'pageEventArea': 'Main'
			});
		});
	},

	'submit form[name="reset"]': function (e: MeteorTemplateEvent) {
		e.preventDefault();
		var $form = $(e.target);
		var data = $form.serializeObject();
		var errorContainer = $form.find('.generalError');
		errorContainer.hide();
		errorContainer.html('');
		errorContainer.append("<ul>");
		var listContainer = errorContainer.find('ul');

		var errors = Users.Profile.db.validate(e.target);
		if (!_.isEmpty(errors)) {
			errorContainer.show();
			for (var errType in errors) {
				listContainer.append('<li>' + errors[errType] + '</li>');
			}
			return;
		}

		if (!data.otpCode && data.useGoogleAuth) {
			errorContainer.append('<li>' + i18n('users.login.errorEmptyGA') + '</li>');
			errorContainer.show();
			$form.find('input[name="otpCode"]').anim('shake');
			return;
		}

		Otp.resetPassword(Session.get('resetToken'), data.password, data.otpCode == undefined ? '' : data.otpCode, function (err?: any) {
			if (err) {
				googleSend({
					'eventCategory': 'UP Recovery',
					'eventAction': 'New Password Error',
					'eventLabel': 'Invalid Token',
					'pageEventArea': 'Main'
				});
				listContainer.append('<li>' + err.reason + '</li>');
				errorContainer.show();
				return;
			}
			Session.set('resetToken', null);
			Session.set('tokenSent', null);

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

});