angular
	.module('pages.dashboard', [
		'dating.models.pages',
		'dating.models.profiles',
		'dating.models.events',
		'userSteps',
		'oneClick',
		'ui.bootstrap',
		'Dating'
	])
	.service('showSpeedDatingBox', function ($modal, ProfilesModel, $rootScope) {
		var showSpeedDatingBox = function () {
			var modalInstance = $modal.open({
				templateUrl: globalParams.templateUrls.pages.speed_dating_box,
				controller: 'SpeedDatingCtrl as speedDatingCtrl',
				size: 'speedDatingBox'
			});

			modalInstance.result.then(
				function (result) {
					$rootScope.$emit('speedDatingModalClosed', result);
				},
				function (reason) {
					$rootScope.$emit('speedDatingModalClosed', reason);
				}
			);

			modalInstance.opened.then(
				function (result) {
					$rootScope.$emit('speedDatingModalOpened', result);
				},
				function (reason) {
					$rootScope.$emit('speedDatingModalOpened', reason);
				}
			);
		};
		return showSpeedDatingBox;
	})
	.controller(
		'SpeedDatingCtrl',
		function ($http, $state, ProfilesModel, globalParamsService, $timeout, $interval, authService, $scope, $rootScope) {
			var speedDatingCtrl = this,
				URLS = {
					POST_TRACK_CTA_CLICK: '/speedDate/trackCtaClick',
					POST_TRACK_ROUND_TWO: '/speedDate/trackWorkflowRoundTwo'
				};
			var GLOBALS = globalParamsService.GLOBALS;
			speedDatingCtrl.isPremium = GLOBALS.userInfo.canSendMessages;
			var ccpInfo = JSON.parse(GLOBALS.ccpInfo);
			var ccpInfoUrl = ccpInfo.urls ? ccpInfo.urls.api : '';
			var timer;

			var mediaStream = null;
			var audioStream = null;

			speedDatingCtrl.startMicrophone = function () {
				if (navigator.mediaDevices.getUserMedia) {
					navigator.mediaDevices.getUserMedia({ audio: true }).then(function (stream) {
						speedDatingCtrl.microphoneEnabled = true;
						audioStream = stream;
					});
				}
			};

			speedDatingCtrl.stopMicrophone = function () {
				if (audioStream) {
					audioStream.getTracks().forEach(function (track) {
						track.stop();
					});
				}
				speedDatingCtrl.microphoneEnabled = false;
			};

			$scope.$on('videoEnded', function () {
				speedDatingCtrl.stopTimer();
				speedDatingCtrl.videoEnded = true;
			});

			$scope.$on('canPlay', function () {
				var videoPlayer = document.querySelector('video-player');
				var speedDateVideoCollection = videoPlayer.querySelectorAll('video');
				if (!speedDateVideoCollection[0]) {
					return;
				}
				speedDateVideoCollection[0].disablePictureInPicture = true;
				speedDateVideoCollection[0].setAttribute('playsinline', '');
			});

			speedDatingCtrl.startCamera = function () {
				var videos = document.getElementsByClassName('video-element');
				if (navigator.mediaDevices.getUserMedia) {
					navigator.mediaDevices
						.getUserMedia({ video: { facingMode: 'user', aspectRatio: 1.777 } })
						.then(function (stream) {
							speedDatingCtrl.cameraEnabled = true;
							mediaStream = stream;
							if (videos.length > 0) {
								videos[0].srcObject = stream;
							}
						});
				}
			};

			var displayTimer;
			speedDatingCtrl.timerCount = 0;
			speedDatingCtrl.displayTimer = '00:00';

			$scope.$watch('speedDatingCtrl.videoCallStarted', function (newVal) {
				if (newVal) {
					$http.post(URLS.POST_TRACK_ROUND_TWO);
					speedDatingCtrl.startTimer();
				} else {
					speedDatingCtrl.stopTimer();
				}
			});

			speedDatingCtrl.startTimer = function () {
				if (!displayTimer) {
					displayTimer = $interval(function () {
						speedDatingCtrl.timerCount++;
						var minutes = Math.floor(speedDatingCtrl.timerCount / 60);
						var seconds = speedDatingCtrl.timerCount % 60;
						speedDatingCtrl.displayTimer =
							(minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);
					}, 1000);
				}
			};

			speedDatingCtrl.stopTimer = function () {
				if (displayTimer) {
					$interval.cancel(displayTimer);
					displayTimer = null;
				}
			};

			speedDatingCtrl.stopCamera = function () {
				var videos = document.getElementsByClassName('video-element');
				if (mediaStream) {
					mediaStream.getTracks().forEach(function (track) {
						track.stop();
					});
					if (videos.length > 0) {
						videos[0].srcObject = null;
					}
					speedDatingCtrl.cameraEnabled = false;
				}
			};

			speedDatingCtrl.getSpeedDateConversation = function () {
				if (!speedDatingCtrl.speedDateProfiles) {
					return;
				}
				ProfilesModel.speedDateConversation(speedDatingCtrl.speedDateProfiles.userUuid, ccpInfoUrl).then(
					function (result) {
						if (result && result.data && result.data.result) {
							var speedDateConversation = result.data.result;

							speedDatingCtrl.messages = speedDateConversation.messages;
							speedDatingCtrl.userProfileImage = globalParams.userInfo.avatar;
							speedDatingCtrl.apProfileImage =
								speedDatingCtrl.speedDateProfiles.photos && speedDatingCtrl.speedDateProfiles.photos[0]
									? speedDatingCtrl.speedDateProfiles.photos[0].medium
									: null;

							if (speedDatingCtrl.messages) {
								speedDatingCtrl.messages.reverse();
								speedDatingCtrl.messages.forEach(function (message) {
									if (message.type == 'event') {
										if (message.message.toLowerCase().includes('waiting on interaction')) {
											//nothing to do for now
										} else if (message.message.toLowerCase().includes('left speed date')) {
											speedDatingCtrl.apLeftChat = true;
										} else if (message.message.toLowerCase().includes('stop round1')) {
											if (!speedDatingCtrl.endRoundOne && !speedDatingCtrl.closeRoundTwoModal) {
												speedDatingCtrl.endRoundOne = true;
											}
										} else if (message.message.toLowerCase().includes('start video')) {
											if (!speedDatingCtrl.endRoundOne && !speedDatingCtrl.closeRoundTwoModal) {
												speedDatingCtrl.endRoundOne = true;
											}
										} else if (message.message.toLowerCase().includes('convo finished')) {
											speedDatingCtrl.conversationFinished = true;
										} else if (message.message.toLowerCase().includes('stop video')) {
											if (speedDatingCtrl.videoEnded) {
												speedDatingCtrl.sendMessage('USER EVENT: stopVideo');
												speedDatingCtrl.videoEnded = false;
												speedDatingCtrl.apStoppedCamera = true;
											}
										}
									} else if (speedDatingCtrl.userHasNotSentMessage && message.type !== 'event') {
										speedDatingCtrl.userHasNotSentMessage = false;
									}
								});
							}

							speedDatingCtrl.conversation = speedDateConversation;
						}
					}
				);
			};
			speedDatingCtrl.getSpeedDateConversation();

			speedDatingCtrl.currentUser = authService.currentUser;
			speedDatingCtrl.userHasToWait = GLOBALS.user.speedDates === '2';
			speedDatingCtrl.showFirstStep = GLOBALS.user.speedDates === '1';
			speedDatingCtrl.foundMatches = false;
			speedDatingCtrl.showProfile = false;
			speedDatingCtrl.showDetails = false;
			speedDatingCtrl.isLiked = false;
			speedDatingCtrl.isMatched = false;
			speedDatingCtrl.showMatchPopUp = false;
			speedDatingCtrl.blockMessages = false;
			speedDatingCtrl.showBlockMessages = false;
			speedDatingCtrl.messageWasSent = false;
			speedDatingCtrl.showBlockProfiles = false;
			speedDatingCtrl.videoCallLoading = false;
			speedDatingCtrl.videoCallStarted = false;
			speedDatingCtrl.showVideoBlock = false;
			speedDatingCtrl.upgradeVideoShown = false;
			speedDatingCtrl.closeRoundTwoModal = false;
			speedDatingCtrl.focusInput = false;
			speedDatingCtrl.messages = [];
			speedDatingCtrl.userHasNotSentMessage = true;
			speedDatingCtrl.conversation = [];
			speedDatingCtrl.startWorkFlow = false;
			speedDatingCtrl.endRoundOne = false;
			speedDatingCtrl.conversationFinished = false;
			speedDatingCtrl.cameraEnabled = false;
			speedDatingCtrl.microphoneEnabled = false;
			speedDatingCtrl.apStoppedCamera = false;
			speedDatingCtrl.apLeftChat = false;
			speedDatingCtrl.apProfileImage = null;
			speedDatingCtrl.userProfileImage = null;
			speedDatingCtrl.modalOpen = true;
			speedDatingCtrl.shouldBlur = false;
			speedDatingCtrl.videoEnded = false;
			speedDatingCtrl.scrollToBottom = function () {
				$timeout(
					function () {
						var container = document.querySelector('.messages');
						if (!container) {
							return;
						}
						container.scrollTop = container.scrollHeight;
					},
					0,
					false
				);
			};

			$scope.$watch('speedDatingCtrl.messages', function (newVal, oldVal) {
				if (newVal && oldVal && newVal.length > oldVal.length) {
					$timeout(speedDatingCtrl.scrollToBottom, 0);
				}
			});

			speedDatingCtrl.hideAllPopups = function () {
				document.querySelector('.modal-speed-wrapper').addEventListener('click', hide);

				function hide(event) {
					if (
						!event.target.classList.contains('send-message') &&
						!event.target.classList.contains('icon-rotate-right')
					) {
						if (speedDatingCtrl.showBlockMessages) {
							speedDatingCtrl.showBlockMessages = false;
						} else if (speedDatingCtrl.showBlockProfiles) {
							speedDatingCtrl.showBlockProfiles = false;
						}
						document.querySelector('.modal-speed-wrapper').removeEventListener('click', hide);
					}
				}
			};

			var modalClosedListener = $rootScope.$on('speedDatingModalClosed', function () {
				speedDatingCtrl.modalOpen = false;
			});

			var modalOpenedListener = $rootScope.$on('speedDatingModalOpened', function () {
				$http.post(URLS.POST_TRACK_CTA_CLICK);
				speedDatingCtrl.modalOpen = true;
			});

			$scope.$on('$destroy', modalClosedListener);
			$scope.$on('$destroy', modalOpenedListener);

			var intervalId;

			function startInterval() {
				if (intervalId) {
					clearInterval(intervalId);
				}
				intervalId = setInterval(function () {
					if (speedDatingCtrl.startWorkFlow && !speedDatingCtrl.conversationFinished && speedDatingCtrl.modalOpen) {
						speedDatingCtrl.getSpeedDateConversation();
					} else if (speedDatingCtrl.conversationFinished || !speedDatingCtrl.modalOpen) {
						clearInterval(intervalId);
					}
				}, 500);
			}

			startInterval();

			document.addEventListener('visibilitychange', function () {
				if (document.visibilityState === 'hidden') {
					clearInterval(intervalId);
				} else {
					startInterval();
				}
			});

			setTimeout(function () {
				if (speedDatingCtrl.messages.length === 0) {
					clearInterval(intervalId);
				}
			}, 1200000); // stop trying after 20 mins, if the flow did not start for some reason

			speedDatingCtrl.startSteps = function () {
				speedDatingCtrl.showFirstStep = false;
				speedDatingCtrl.showLoader = true;
				ProfilesModel.getSpeedDateProfiles().then(function (result) {
					speedDatingCtrl.speedDateProfiles = result.data.profile;
					speedDatingCtrl.speedDateProfilesLength = Object.values(result.data).length;
					speedDatingCtrl.loadProfiles(false);
					$timeout(function () {
						if (speedDatingCtrl.speedDateProfiles.length < 1) {
							speedDatingCtrl.showLoader = false;
							speedDatingCtrl.userHasToWait = true;
						} else {
							speedDatingCtrl.foundMatch();
						}
					}, 2000);
				});
			};
			speedDatingCtrl.foundMatch = function () {
				speedDatingCtrl.showLoader = false;
				speedDatingCtrl.foundMatches = true;
			};
			speedDatingCtrl.loadProfiles = function (toggleShowProfile) {
				if (!speedDatingCtrl.startWorkFlow && GLOBALS.user.speedDates === '1' && !toggleShowProfile) {
					speedDatingCtrl.startWorkFlow = true;
					ProfilesModel.startActionWorkflow(speedDatingCtrl.speedDateProfiles.userId);
				} else if (toggleShowProfile) {
					speedDatingCtrl.showProfile = true;
					speedDatingCtrl.foundMatches = false;
				}
			};
			speedDatingCtrl.toggleDetails = function () {
				speedDatingCtrl.showDetails = !speedDatingCtrl.showDetails;
			};
			speedDatingCtrl.likeHer = function () {
				speedDatingCtrl.isLiked = true;
				$timeout(function () {
					speedDatingCtrl.isMatched = true;
					speedDatingCtrl.showMatchPopUp = true;
				}, 2000);
			};
			speedDatingCtrl.hideMatchPrompt = function () {
				speedDatingCtrl.showMatchPopUp = false;
			};

			speedDatingCtrl.sendMessage = function (messageContent) {
				var userMessage = document.querySelector('#message-user');

				if (messageContent && messageContent.trim() !== '') {
					userMessage.value = messageContent;
				}

				if (userMessage.value !== '' && speedDatingCtrl.startWorkFlow) {
					ProfilesModel.speedDateSendMessage(
						userMessage.value,
						speedDatingCtrl.speedDateProfiles.userUuid,
						ccpInfoUrl
					).then(function (result) {
						if (result.data.result && result.data.result.type === 'upgradeSpeedDateRequest') {
							speedDatingCtrl.messageWasSent = true;
							speedDatingCtrl.showBlockMessages = true;
						}
						speedDatingCtrl.getSpeedDateConversation();
					});
					userMessage.value = ' ';
					speedDatingCtrl.hideAllPopups();
				}
			};
			speedDatingCtrl.hideBlock = function () {
				speedDatingCtrl.showBlockProfiles = false;
			};
			speedDatingCtrl.showNextUser = function () {
				speedDatingCtrl.showBlockProfiles = true;
				speedDatingCtrl.showBlockMessages = false;
				speedDatingCtrl.hideAllPopups();
			};
			speedDatingCtrl.hideBlockMessages = function () {
				speedDatingCtrl.showBlockMessages = false;
			};
			speedDatingCtrl.blockMoreMessages = function () {
				if (speedDatingCtrl.messageWasSent) {
					speedDatingCtrl.showBlockMessages = true;
					speedDatingCtrl.showBlockProfiles = false;
				}
			};
			speedDatingCtrl.videoCallLoad = function () {
				if (speedDatingCtrl.upgradeVideoShown) {
					speedDatingCtrl.showVideoBlock = true;
				} else {
					speedDatingCtrl.sendMessage('USER EVENT: stopRoundOne');
					speedDatingCtrl.startCamera();
					speedDatingCtrl.videoCallLoading = true;
					speedDatingCtrl.closeRoundTwoModal = true;
					speedDatingCtrl.endRoundOne = false;
					$timeout(function () {
						speedDatingCtrl.videoCallLoading = false;
						speedDatingCtrl.videoCallStarted = true;
						speedDatingCtrl.startCamera();
						speedDatingCtrl.showUpgradeOnVideo();
					}, 3000);
				}
			};

			speedDatingCtrl.redirectToUpgrade = function () {
				window.location.href = '/billing/upgrade?speedDateUpgrade=1';
			};
			speedDatingCtrl.showUpgradeOnVideo = function () {
				timer = $timeout(function () {
					speedDatingCtrl.showVideoBlock = true;
					speedDatingCtrl.upgradeVideoShown = true;
					speedDatingCtrl.shouldBlur = true;
				}, speedDatingCtrl.speedDateProfiles.blurVideoAfter * 1000);
			};
			speedDatingCtrl.videoCallUnload = function () {
				$timeout.cancel(timer);
				speedDatingCtrl.videoCallLoading = false;
				speedDatingCtrl.upgradeVideoShown = true;
				speedDatingCtrl.shouldBlur = true;
				speedDatingCtrl.showVideoBlock = true;
			};
			speedDatingCtrl.hideBlockVideo = function () {
				speedDatingCtrl.showVideoBlock = false;
			};
		}
	)
	.directive('ngEnter', function () {
		return function (scope, element, attrs) {
			element.bind('keydown keypress', function (event) {
				if (event.which === 13) {
					scope.$apply(function () {
						scope.$eval(attrs.ngEnter);
					});
					event.preventDefault();
				}
			});
		};
	})
	.directive('disableRightClick', function () {
		return {
			restrict: 'A',
			link: function (scope, element) {
				element.on('contextmenu', function (event) {
					event.preventDefault();
				});
			}
		};
	})
	.directive('focusMe', function ($timeout) {
		return {
			scope: { trigger: '=focusMe' },
			link: function (scope, element) {
				scope.$watch('trigger', function (value) {
					if (value) {
						$timeout(function () {
							element[0].focus();
						});
						scope.trigger = false;
					}
				});
			}
		};
	})
	.config([
		'$stateProvider',
		function ($stateProvider) {
			$stateProvider.state('dating.pages.dashboard', {
				url: 'dashboard',
				views: {
					//target the ui-view named 'sections' in ROOT state
					'sections@': {
						controller: 'DashboardCtrl as dashboardCtrl',
						templateUrl: globalParams.templateUrls.pages.dashboard
					}
				}
			});
		}
	])
	.controller(
		'DashboardCtrl',
		function (
			$scope,
			$state,
			$location,
			PagesModel,
			ProfilesModel,
			EventsModel,
			showSpeedDatingBox,
			showStep1Box,
			showStep2Box,
			showUpdatePasswordBox,
			showAffiliateOneClickStep1Box,
			showAffiliateOneClickStep2Box,
			showAffiliateOneClickStep3Box,
			showOneClickBox,
			globalParamsService,
			authService,
			$rootScope,
			monetizationHook,
			FeaturedMembershipService,
			UpgradeDialog,
			$window
		) {
			if (!authService.isAuthenticated) {
				$state.go(window.globalParams.isMobileScreen ? 'dating.pages.datingCenterMobile' : 'dating.pages.datingCenter');
				return;
			}
			$('html, body').animate({ scrollTop: 0 }, 50);
			var dashboardCtrl = this;
			var GLOBALS = globalParamsService.GLOBALS;
			$scope.$on('userLoggedIn', function () {
				setCtrl();
			});

			function setCtrl() {
				$scope.GLOBALS = globalParamsService.GLOBALS;
				dashboardCtrl.currentUser = authService.currentUser;
				dashboardCtrl.isLoggedIn = authService.isAuthenticated;
				dashboardCtrl.isFeaturedEnabled = parseInt(GLOBALS.isFeaturedEnabled);
				dashboardCtrl.isFeatured = !!dashboardCtrl.currentUser.isFeatured || FeaturedMembershipService.getIsFeatured();
				dashboardCtrl.showFeaturedFS = GLOBALS.showFeaturedFunctionality;
				dashboardCtrl.isSafeMode = dashboardCtrl.currentUser.safeMode;
				dashboardCtrl.isMobile = parseInt(GLOBALS.isMobile);
				dashboardCtrl.siteShortName = GLOBALS.siteShortName;
				dashboardCtrl.isMainstream = GLOBALS.isMainstreamSite;
				dashboardCtrl.showAdvertisementLabel = GLOBALS.markAdvert && GLOBALS.userInfo.isRootTraffic;
				dashboardCtrl.featureToggles = GLOBALS.featureToggles;
				dashboardCtrl.monetizationOptions = GLOBALS.monetizationOptions;
				dashboardCtrl.showSpeedDatesToUser = GLOBALS.user.speedDates === '1' || GLOBALS.user.speedDates === '2';
				dashboardCtrl.showExoclickAds = !!dashboardCtrl.currentUser.showExoclickAds;
				dashboardCtrl.showExoMobileHeader = !!dashboardCtrl.currentUser.showExoMobileHeader;
				dashboardCtrl.isCreditsSite = parseInt(GLOBALS.isCreditsSite);
				dashboardCtrl.isExternalUpgradeSite = parseInt(GLOBALS.isExternalUpgradeSite);
				var externalUpgradeUrl = dashboardCtrl.isLoggedIn ? GLOBALS.userInfo.partnerBillingRedirectUrl : '';
				dashboardCtrl.upgradeUrl = parseInt(GLOBALS.isExternalUpgradeSite) ? externalUpgradeUrl : '/billing/upgrade';
				dashboardCtrl.isRegularUpgradeSite = !dashboardCtrl.isExternalUpgradeSite && !dashboardCtrl.isCreditsSite;
				dashboardCtrl.shouldShowUpgradePopup = +GLOBALS.showUpgradePopup && dashboardCtrl.isRegularUpgradeSite;
			}

			function init() {
				PagesModel.setCurrentPage('Dashboard');
				dashboardCtrl.monetizationHook = monetizationHook;
				dashboardCtrl.showSpeedDatingBox = showSpeedDatingBox;
				setCtrl();
			}

			init();
			if ($location.url().indexOf('section=SpeedDate') !== -1) {
				dashboardCtrl.showSpeedDatingBox();
			}

			if (+dashboardCtrl.featureToggles.getProfileList) {
				ProfilesModel.getProfilesList(1, 'near-you', 20).then(function (result) {
					dashboardCtrl.nearYouProfiles = result.profiles;
				});
			}

			if (+dashboardCtrl.featureToggles.getProfileListSE) {
				if (dashboardCtrl.currentUser.membership === 'standard') {
					ProfilesModel.getProfilesList(1, 'near-you', 15).then(function (result) {
						dashboardCtrl.streamMembers = result.profiles;
					});
				} else {
					ProfilesModel.getProfilesList(1, 'premium', 15).then(function (result) {
						dashboardCtrl.streamMembers = result.profiles;
					});
				}
				ProfilesModel.getProfilesList(1, 'online-now', 15).then(function (result) {
					dashboardCtrl.onlineNowProfiles = result.profiles;
				});
			}
			if (dashboardCtrl.isFeaturedEnabled) {
				ProfilesModel.getProfilesList(1, 'featured', 15).then(function (result) {
					dashboardCtrl.featuredMembers = result.profiles;
				});
			}

			$scope.$on('featuredMembershipPurchased', function () {
				dashboardCtrl.isFeatured = true;
				if (dashboardCtrl.isFeaturedEnabled) {
					ProfilesModel.getProfilesList(1, 'featured', 15).then(function (result) {
						dashboardCtrl.featuredMembers = result.profiles;
					});
				}
			});

			if (+dashboardCtrl.featureToggles.fetchTabs) {
				dashboardCtrl.onlineNowLoading = true;
				dashboardCtrl.newMembersLoading = true;
				dashboardCtrl.recommendedLoading = true;
				ProfilesModel.getProfilesList(1, 'online-now', 20).then(function (result) {
					dashboardCtrl.onlineNowProfiles = result.profiles;
					dashboardCtrl.onlineNowLoading = false;
				});
				ProfilesModel.getProfilesList(1, 'new-members', 20).then(function (result) {
					dashboardCtrl.newMembersProfiles = result.profiles;
					dashboardCtrl.newMembersLoading = false;
				});
				ProfilesModel.getProfilesList(1, 'near-you', 20).then(function (result) {
					dashboardCtrl.nearYouProfiles = result.profiles;
					dashboardCtrl.recommendedLoading = false;
				});
				dashboardCtrl.section = 'likes-you';
				dashboardCtrl.onlineNow = true;
				dashboardCtrl.newMembers = false;
				dashboardCtrl.recommended = false;
				dashboardCtrl.isLoading = true;
				dashboardCtrl.goToPlayPage = function () {
					$state.go('dating.pages.play');
				};
				dashboardCtrl.onDashboardBottomSelectorClicked = function (selectedItem) {
					$rootScope.$broadcast('refreshBanners');
					dashboardCtrl.section = selectedItem;
				};

				dashboardCtrl.onDashboardTopSelectorClicked = function (selectedItem) {
					$rootScope.$broadcast('refreshBanners');
					if (selectedItem === 'newMembers') {
						dashboardCtrl.onlineNow = false;
						dashboardCtrl.newMembers = true;
						dashboardCtrl.recommended = false;
					}
					if (selectedItem === 'onlineNow') {
						dashboardCtrl.onlineNow = true;
						dashboardCtrl.newMembers = false;
						dashboardCtrl.recommended = false;
					}
					if (selectedItem === 'recommended') {
						dashboardCtrl.onlineNow = false;
						dashboardCtrl.newMembers = false;
						dashboardCtrl.recommended = true;
					}
				};
			}

			if (
				_.find(GLOBALS.loadOnDashboard, function (str) {
					return str === 'matches';
				})
			) {
				dashboardCtrl.isLoadingMatches = true;
				ProfilesModel.getDashboardMatches().then(function (result) {
					dashboardCtrl.isLoadingMatches = false;
					dashboardCtrl.matches = result;
					if (!dashboardCtrl.matches.length) {
						dashboardCtrl.noMatchesClass =
							'no-matches-' + GLOBALS.siteShortName + '-photo-' + dashboardCtrl.currentUser.gender;
					}
				});
			}
			if (
				_.find(GLOBALS.loadOnDashboard, function (str) {
					return str === 'tickers';
				})
			) {
				EventsModel.getTickers().then(function (result) {
					var redirectHeader = result.headers('X-Dating-Filter-Redirect');
					if (redirectHeader) {
						window.location.replace(redirectHeader);
					}

					dashboardCtrl.tickers = result.data;
					if (+dashboardCtrl.featureToggles.getTickersXP) {
						if (dashboardCtrl.tickers.nViewedYou > 7 || dashboardCtrl.tickers.nYouViewed > 7) {
							angular.element('.tickerContainer').prepend($('#dashboard-views-cnt').detach());
							if (dashboardCtrl.tickers.nViewedYou > dashboardCtrl.tickers.nYouViewed) {
								dashboardCtrl.isViewActive = true;
							}
						}
						if (dashboardCtrl.tickers.nLikesYou > 7 || dashboardCtrl.tickers.nYouLike > 7) {
							angular.element('.tickerContainer').prepend($('#dashboard-likes-cnt').detach());
							if (dashboardCtrl.tickers.nLikesYou > dashboardCtrl.tickers.nYouLike) {
								dashboardCtrl.isLikeActive = true;
							}
						}
					}
				});
				var onMessagesSelected = function () {
					EventsModel.sendEvent('updateLastViewedMessagesTab');
					dashboardCtrl.tickers.nNewMessages = 0;
				};
				var onMatchesSelected = function () {
					EventsModel.sendEvent('updateLastViewedMatchesTab');
					dashboardCtrl.tickers.nNewMatches = 0;
				};
				var onViewedYouSelected = function () {
					EventsModel.sendEvent('updateViewedYouTabTime');
					dashboardCtrl.tickers.nNewViewedYou = 0;
				};
				var onLikesYouSelected = function () {
					EventsModel.sendEvent('updateLastViewedRequestsTab');
					dashboardCtrl.tickers.nNewLikesYou = 0;
				};
				dashboardCtrl.onMessagesSelected = onMessagesSelected;
				dashboardCtrl.onMatchesSelected = onMatchesSelected;
				dashboardCtrl.onViewedYouSelected = onViewedYouSelected;
				dashboardCtrl.onLikesYouSelected = onLikesYouSelected;
			}

			if ($state.current.name === 'dating.pages.dashboard' && !GLOBALS.loadMobileLayout) {
				var sent = false;
				if (GLOBALS.user.justRegistered) {
					showStep1Box();
				}
				if (GLOBALS.user.showUploadPhotoDescriptionBox) {
					if (GLOBALS.user.showOneClickBox) {
						showOneClickBox();
						if (GLOBALS.cookie1ClickActionsSooner) {
							$(window).on('focus mousemove touchmove', function () {
								if (sent) {
									return;
								}
								EventsModel.updateFocus();
								sent = true;
							});
						}
					} else {
						showStep2Box();
					}
				}
				if (GLOBALS.user.resetPassword) {
					showUpdatePasswordBox();
				}
				if (GLOBALS.user.affiliateOneClickBox) {
					showAffiliateOneClickStep1Box();
					if (GLOBALS.cookie1ClickActionsSooner) {
						$(window).on('focus mousemove touchmove', function () {
							if (sent) {
								return;
							}
							EventsModel.updateFocus();
							sent = true;
						});
					}
				}
				if (GLOBALS.user.affiliateOneClickBoxStep2) {
					showAffiliateOneClickStep2Box();
					if (GLOBALS.cookie1ClickActionsSooner) {
						$(window).on('focus mousemove touchmove', function () {
							if (sent) {
								return;
							}
							EventsModel.updateFocus();
							sent = true;
						});
					}
				}
				if (GLOBALS.user.affiliateOneClickBoxStep3) {
					showAffiliateOneClickStep3Box();
					if (GLOBALS.cookie1ClickActionsSooner) {
						$(window).on('focus mousemove touchmove', function () {
							if (sent) {
								return;
							}
							EventsModel.updateFocus();
							sent = true;
						});
					}
				}
			}
			dashboardCtrl.showUpgrade = function () {
				UpgradeDialog.open();
			};
			dashboardCtrl.handleReveal = function (profile) {
				var data = { userId: profile.id };
				if (!dashboardCtrl.isLoggedIn) {
					$state.go('dating.pages.viewProfile', { id: profile.id });
				} else {
					if (GLOBALS.isCreditsSite) {
						if (dashboardCtrl.currentUser.membership === 'premium' && !GLOBALS.userInfo.hasInsufficientCreditsFlag) {
							ProfilesModel.sendRevealLocation(data).then(function (response) {
								profile.showDistanceInsteadOfLocation = false;
								profile.country = response.data.location.country;
								profile.city = response.data.location.city;
								profile.location = profile.city + ', ' + profile.country;
								profile.bCanRequestPhoto = false;
								profile.isPhotoRequestDisabled = false;
							});
						} else {
							$window.location.href = dashboardCtrl.upgradeUrl;
						}
					} else {
						if (dashboardCtrl.shouldShowUpgradePopup) {
							dashboardCtrl.showUpgrade();
						} else {
							$window.location.href = dashboardCtrl.upgradeUrl;
						}
					}
				}
			};
		}
	);
