/*
	Created by Michael Schuijff <michael@reglobe.nl>
	Copyright Lost Images, The Netherlands
	
	For more information, visit www.michaelschuijff.nl
*/

document.addEventListener('deviceready', () => {
	let element, timer;
	
	FirebasePlugin.onMessageReceived((payload) => {
		if (payload.aps && payload.aps.alert) {
			Object.assign(payload, payload.aps.alert);
		}
		
		if (payload.notification) {
			Object.assign(payload, payload.notification);
		}
		
		startup.queue(() => {
			if (!config.user) {
				toast(__('You\'re not logged in.'));
				return;
			}
			
			let url = payload.url || '';
			
			if (payload.tap) {
				FirebasePlugin.clearAllNotifications();
				
				if (url) {
					if (payload.user_id == config.user.id) {
						router.go(url);
					} else {
						switchToUser(payload.user_id, url, null, () => toast(__('User not found.')));
					}
				}
				
				api.post({
					url: '/alert/' + payload.alert_id,
					data: { state: 'opened' },
					success: () => setUserState(true),
					error: false
				});
			} else {
				if (url.substr(0, 10) == '/messages/') {
					let path = router.getURL().split('?')[0];
					
					if (path == url) {
						if (window.activeView) {
							activeView.trigger('pause');
							activeView.trigger('resume');
						}
					} else {
						if (element) {
							element.remove();
						}
						
						element = renderNotification(payload);
						document.body.append(element);
						
						clearTimeout(timer);
						timer = setTimeout(() => element.remove(), 10000);
					}
				}
				
				setUserState(true);
			}
			
			mainMenu.classList.add('hidden');
		});
	});

	function renderNotification (payload) {
		let container = createElement('div', 'notification');

		container.onclick = () => {
			if (!payload.user_id || config.user.id == payload.user_id) {
				router.go(payload.url);
			} else {
				switchToUser(payload.user_id, payload.url, null, () => toast(__('Couldn\'t switch to this profile.')));
			}
			
			setTimeout(() => container.remove(), 50);
		}
		
		if (payload.avatar) {
			container.className += ' has-avatar';

			let avatar = createElement('div', 'avatar');
			
			preload(payload.avatar, (url) => avatar.style.backgroundImage = 'url(' + url + ')');
			
			container.append(avatar);
		}
		
		if (payload.title) {
			container.append(createElement('div', 'title', payload.title));
		}
		
		if (payload.body) {
			container.append(createElement('div', 'body', payload.body));
		}
		
		let button = createElement('button', 'close');
		
		button.onclick = (e) => {
			e.stopPropagation();
			container.remove();
		}
		
		container.append(button);
		
		return container;
	}
});
