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

interface Templates {
	register: Template;
}

Template.register.onRendered(function() {

	googleSend({
		'eventCategory': 'Registration',
		'eventAction': 'Started registration',
		'pageEventArea': 'Main'
	});

});

Template.register.helpers({

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

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

	refCode: function() {
		return $.cookie('refCode');
	},

	dobYears: function () {
		var years = [];
		var start = moment().subtract(18, 'years');
		var end = moment().subtract(100, 'years');
		years.push('<option>Year</option>');
		while (start.format('YYYY') >= end.format('YYYY')) {
			years.push('<option value="' + start.format('YYYY') + '">' + start.format('YYYY') + '</option>');
			start = start.subtract(1,'years');
		}
		return years;
	},

	dobMonths: function () {
		var months = [];
		var start = 1;
		var end = 12;
		months.push('<option>Month</option>');
		while (start <= end) {
			months.push('<option value="' + start + '">' + start + '</option>');
			start++;
		}
		return months;
	},

	dobDays: function () {
		var days = [];
		var start = 1;
		var end = 31;
		days.push('<option>Day</option>');
		while (start <= end) {
			days.push('<option value="' + start + '">' + start + '</option>');
			start++;
		}
		return days;
	},

	registerEnabled: function() {
		return Session.get('clientCountry') !== 'GB' && Session.get('clientCountry') !== 'AU' && Session.get('clientCountry') !== 'US' && Session.get('clientCountry') !== 'UM';
	}

});

Template.register.events({

	'keyup, change input': _.debounce(function(e: MeteorTemplateEvent) {
		Users.Profile.db.validate(e.target, function(){});
	}, 300),

	'submit form': function(e: MeteorTemplateEvent) {
		e.preventDefault();

		if (Session.get('clientCountry') === 'GB' || Session.get('clientCountry') === 'AU' || Session.get('clientCountry') === 'US' || Session.get('clientCountry') === 'UM') {
			return;
		}

		var $form = $(e.target);
		var data = $form.serializeObject();

		var errorContainer = $form.find('.generalError');
		errorContainer.hide();
		errorContainer.html('');

		Session.set('signupButtonDisabled', true);

		Users.Profile.db.validate(e.target, function (validationMessages) {
			var isValid = true;
			for (var key in validationMessages) {
				var $field = $form.find('[name=' + key + ']');
				var $fieldContainer = $field.parent().find('.icon');
				var $messageContainer = $fieldContainer.find('span');

				$fieldContainer.addClass('error');
				$messageContainer.html(validationMessages[key]);
				isValid = false;
			}

			var dateOfBirth = $("[name='year']").val() + '-' + $("[name='month']").val() + '-' + $("[name='day']").val();
			if (!moment(dateOfBirth, 'YYYY-M-D', true).isValid()) {
				errorContainer.append('<li>Incorrect date of birth</li>');
				isValid = false;
				googleSend({
					'eventCategory': 'Registration',
					'eventAction': 'Date of Birth Error',
					'eventLabel': 'Date of Birth is incorrect',
					'pageEventArea': 'Main'
				});
			}
			else if (calcAge(moment(dateOfBirth, 'YYYY-M-D', true).toDate()) < 18) {
				errorContainer.append('<li>You must be at least 18 years old to register</li>');
				isValid = false;
			}

			if (!isValid) {
				errorContainer.show();
				var errs = Users.Profile.db.errors('register');
				for (var errType in errs) {
					errorContainer.append('<li>' + errs[errType] + '</li>');
					var errMsg = errs[errType];
					if (errType == 'repeatPassword') {
						errType = 'Confirm Password';
					}
					googleSend({
						'eventCategory': 'Registration',
						'eventAction': errType.substr(0, 1).toUpperCase() + errType.substr(1) + ' Error',
						'eventLabel': errMsg,
						'pageEventArea': 'Main'
					});

				}
				Session.set('signupButtonDisabled', false);
				return;
			}

			Session.set('loading', true);
			Accounts.createUser({
				username: data.username,
				email: data.email,
				password: data.password,
				profile: {
					dateOfBirth: dateOfBirth,
					refCode: $.cookie('refCode') ? $.cookie('refCode') : data.refCode,
					refPage: Session.get('refPage') ? Session.get('refPage') : undefined

				}
			}, function (err?) {
				Session.set('loading', false);
				if (err) {
					Log.error(err);
					Session.set('signupButtonDisabled', false);
					return;
				}
				googleSend({
					'eventCategory': 'Registration',
					'eventAction': 'Registration Complete',
					'pageEventArea': 'Main',
					'registrationsCompleted': 1
				}, true);
				Session.set('betSlipError', false);
				Session.set('signupButtonDisabled', false);
				Pages.go('/');
				(<HTMLFormElement> $form[0]).reset();
				Meteor.call('Fraud/getDeviceInfo', (err, res) => {
					if (err) {
						return;
					}
					Meteor.call('Fraud/RegisterLookup', res);
				});
				Session.set('showRegisterLanding', true);

			});
		});

	},

	'click .fa-eye': function() {
		let pwdField = $('.pwd');
		if (pwdField.attr('type') == 'password') {
			pwdField.attr('type', 'text')
		}
		else {
			pwdField.attr('type', 'password')
		}
	}

});
