angular
	.module('pages.unSubscribe', ['Dating'])
	.config([
		'$stateProvider',
		function ($stateProvider) {
			$stateProvider
				.state('dating.pages.unSubscribe', {
					url: 'emailUnsubscribe',
					views: {
						'sections@': {
							templateUrl: globalParams.templateUrls.pages.un_subscribe,
							controller: 'UnSubscribeCtrl as unSubscribeCtrl'
						}
					}
				})
				.state('dating.pages.unsubscribeFromAll', {
					url: 'emailUnsubscribeAll',
					deepStateRedirect: { default: { state: 'dating.pages.unSubscribe' } }
				})
				.state('dating.pages.unsubscribeFromSpecials', {
					url: 'emailUnsubscribeSpecials',
					deepStateRedirect: { default: { state: 'dating.pages.unSubscribe' } }
				});
		}
	])
	.factory('sharedData', function () {
		var userInfo = {};
		userInfo.safeMode = false;
		userInfo.exoSubData = '';
		userInfo.adniumSubData = '';
		userInfo.goAdserverSubData = '';

		userInfo.safeModeChanged = function (value) {
			this.safeMode = value;
		};

		userInfo.exoSubDataChanged = function (value) {
			this.exoSubData = value;
		};

		userInfo.adniumSubDataChanged = function (value) {
			this.adniumSubData = value;
		};

		userInfo.goAdserverSubDataChanged = function (value) {
			this.goAdserverSubData = value;
		};

		return userInfo;
	})
	.controller(
		'UnSubscribeCtrl',
		function ($rootScope, $location, $timeout, PagesModel, globalParamsService, sharedData) {
			var GLOBALS = globalParamsService.GLOBALS;
			var unSubscribeCtrl = this,
				REDIRECT_COUNTER = 15,
				object = $location.search(),
				params = {
					email: object.email,
					category: object.category,
					provider: object.provider
				};

			unSubscribeCtrl.email = decodeIfValidBase64(object.email);
			unSubscribeCtrl.isMobile = parseInt(GLOBALS.isMobile);
			unSubscribeCtrl.siteShortName = GLOBALS.siteShortName;
			unSubscribeCtrl.status = 'initial';
			unSubscribeCtrl.themeFolder = GLOBALS.baseUrl;
			unSubscribeCtrl.removeOptimiserRedirects = GLOBALS.removeOptimiserRedirects;

			PagesModel.setCurrentPage('UnSubscribe');

			function decodeIfValidBase64(email) {
				try {
					var decodedEmail = atob(email);
					return decodedEmail;
				} catch (error) {
					return email;
				}
			}

			var redirectOnTimeOut = function () {
				unSubscribeCtrl.redirectCounter--;
				if (unSubscribeCtrl.redirectCounter == 0) {
					window.location.href = unSubscribeCtrl.unSubscribePageData.sRedirectLink;
				} else {
					$timeout(redirectOnTimeOut, 1000);
				}
			};

			var resubscribe = function () {
				PagesModel.reSubscribe(params).then(function (result) {
					unSubscribeCtrl.status = result.data.status;
				});
			};

			PagesModel.unSubscribe(params).then(function (result) {
				if (_.isEmpty(result.data)) {
					window.location.href = '/';
				} else {
					unSubscribeCtrl.unSubscribePageData = result.data;
					unSubscribeCtrl.showAds = result.data.showAds;
					unSubscribeCtrl.showAdvertisementLabel = result.data.markAdvert;
					$rootScope.$broadcast('sign-out:success');
					unSubscribeCtrl.redirectCounter = REDIRECT_COUNTER;
					sharedData.safeModeChanged(result.data.bSafeMode);
					sharedData.exoSubDataChanged(result.data.exoSubData);
					sharedData.adniumSubDataChanged(result.data.adniumSubData);
					sharedData.goAdserverSubDataChanged(result.data.goAdserverSubData);
					if (!unSubscribeCtrl.removeOptimiserRedirects) {
						redirectOnTimeOut();
					}
				}
				$rootScope.$broadcast('unsubDataLoaded', {
					safeMode: result.data.bSafeMode,
					exoSubData: result.data.exoSubData,
					exoSubUrlParams: result.data.exoSubUrlParams,
					adniumSubData: result.data.adniumSubData,
					adniumSubUrlParams: result.data.adniumSubUrlParams
				});
				unSubscribeCtrl.isLoading = false;
			});

			unSubscribeCtrl.isLoading = true;
			unSubscribeCtrl.resubscribe = resubscribe;
			$(window).on('resize', function () {
				var w = window.innerWidth;
				unSubscribeCtrl.isMobile = w <= 900;
			});
		}
	)
	.controller('SeparateUnsubscribeCtrl', function (PagesModel, globalParamsService, authService, $state) {
		var GLOBALS = globalParamsService.GLOBALS;
		var SeparateUnsubscribeCtrl = this;
		SeparateUnsubscribeCtrl.isLoggedIn = authService.isAuthenticated;
		if (!SeparateUnsubscribeCtrl.isLoggedIn) {
			$state.go(window.globalParams.isMobileScreen ? 'dating.pages.datingCenterMobile' : 'dating.pages.datingCenter');
			return;
		}
		PagesModel.setCurrentPage('SeparateUnsubscribe');

		SeparateUnsubscribeCtrl.imagesUrl = GLOBALS.baseUrl + '/styles/images/';
		SeparateUnsubscribeCtrl.unsubscribeFromAll = GLOBALS.unsubscribeFromAll;
		SeparateUnsubscribeCtrl.unsubscribeFromSpecials = GLOBALS.unsubscribeFromSpecials;
		SeparateUnsubscribeCtrl.showCustomResponse = false;
		SeparateUnsubscribeCtrl.userEmailAddress = GLOBALS.userInfo.emailCurrentUser;
	});
