/**
 * Event listener for push event
 */
self.addEventListener('push', event => {
	if (typeof event.data === 'undefined') {
		return;
	}

	let itemId = 0;
	let	typeId = 0;
	try {
		const notificationData = event.data.json();
		itemId = notificationData.item_id;
		typeId = notificationData.type_id;
	} catch {
		self.registration.showNotification(event.data.text());
		return;
	}

	const getNotificationUrl = '{{ U_WEBPUSH_GET_NOTIFICATION }}';

	const formData = new FormData();
	formData.append('item_id', itemId.toString(10));
	formData.append('type_id', typeId.toString(10));

	fetch(getNotificationUrl, {
		method: 'POST',
		headers: {
			'X-Requested-With': 'XMLHttpRequest',
		},
		body: formData,
	})
		.then(response => response.json())
		.then(response => {
			const responseBody = response.title + '\n' + response.text;
			const options = {
				body: responseBody,
				data: response,
				icon: response.avatar.src,
			};
			self.registration.showNotification(response.heading, options);
		});
});

/**
 * Event listener for notification click
 */
self.addEventListener('notificationclick', event => {
	event.notification.close();
	if (typeof event.notification.data !== 'undefined') {
		event.waitUntil(self.clients.openWindow(event.notification.data.url));
	}
});
