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

router.register('/settings', () => {
	if (!config.user) {
		if (!config.bot) {
			router.redirect('/login', { url: router.getURL() });
		} else {
			router.noIndex();
		}

		return;
	}
	
	let view = createView({
		titleBar: __('Settings'), hideMainTitleBar: true, hideBottomMenu: true,  buttons: ['close'], className: 'settings'
	});
	
	let container = createElement('div', 'private');
	
	let notice = createElement('p', null, __('If your profile is set to private, only people you approve can see your posts. Your existing followers will not be affected.'));
	
	let input = createElement('input', 'toggle');
	Object.assign(input, { type: 'checkbox', checked: config.user.private });
		
	let label = createElement('span', null, __('Private profile'));
	
	input.onchange = () => {
		let value = input.checked;
		
		let data = { 'private': '' };
		
		if (value) {
			data.private = 'true';
		}
		
		api.post({
			url: '/self',
			data: data,
			success: () => {
				config.user.private = value;
				toast(__('Your privacy setting has been updated.'));
			}
		});
	}
	
	container.append(notice, input, label);
	
	view.content.append(container);
	
	function createButton (label, url) {
		let link = createElement('a', 'menu-item', createElement('span', 'label', label));
		link.href = url;
		
		view.content.append(link);
	}
	
	createButton(__('Connect your YouTube account'), '/settings/youtube');
	
	createButton(__('Alert preferences'), '/alerts/settings');
	
	createButton(__('Dark mode setting'), '/settings/dark-mode');
	
	createButton(__('Manage moderators'), '/moderators/' + config.user.id);
	
	createButton(__('Pending followers'), '/self/pending-followers');
	
	createButton(__('Your blocked users'), '/self/blocked-users');
	
	createButton(__('Delete your account'), '/profile/delete');
	
	return view;
});

router.register('/settings/dark-mode', () => {
	if (!config.user) {
		if (!config.bot) {
			router.redirect('/login', { url: router.getURL() });
		} else {
			router.noIndex();
		}

		return;
	}
	
	let view = createView({
		titleBar: __('Dark mode'), hideMainTitleBar: true, hideBottomMenu: true, buttons: ['close', 'confirm']
	});
	
	let value = options.get('dark-mode', 'automatic');
	
	let form = createElement('form', null, createElement('p', null, __('Select your colour scheme preference.')));
	form.autocomplete = 'off';
	
	let label = createElement('label', '', createElement('span', null, __('Colour scheme')));
	
	let input = createElement('select');
	
	input.onchange = () => {
		options.set('dark-mode', input.value);
		refreshDarkMode();
	}
	
	let modes = [
		{
			value: 'automatic',
			label: __('Automatic')
		}, {
			value: 'light',
			label: __('Light scheme')
		}, {
			value: 'dark',
			label: __('Dark scheme')
		}
	];
	
	for (let mode of modes) {
		let element = createElement('option', null, mode.label);
		element.value = mode.value;
		
		if (mode.value == value) {
			element.selected = true;
		}
		
		input.append(element);
	}
	
	label.append(input);
	
	form.append(label);
	
	view.content.append(form);
	
	view.register('close', () => {
		options.set('dark-mode', value);
		refreshDarkMode();
	});
	
	view.register('confirm', () => {
		toast(__('Updated your colour scheme preference.'));
		router.back(false);
	});
	
	return view;
});

router.register('/settings/youtube', () => {
	if (!config.user) {
		if (!config.bot) {
			router.redirect('/login', { url: router.getURL() });
		} else {
			router.noIndex();
		}

		return;
	}
	
	let view = createView({
		titleBar: __('YouTube account'), hideMainTitleBar: true, hideBottomMenu: true,  buttons: ['close', 'confirm']
	});
	
	let html;
	
	html  = '<p>' + _e('Connect your') + ' <strong>' + _e('YouTube account') + '</strong> ' +
									_e('to your Train Siding profile by entering your') + ' <strong>' + _e('channel URL') + '</strong> ' + _e('below') + '.</p>';
	html += '<p>' + _e('When enabled, a link to each newly uploaded YouTube video will automatically be posted on your Train Siding profile.') + '</p>';
	html += '<p>' + _e('New videos appear within 15 minutes of being uploaded to YouTube.') + '</p>';
	html += '<p>' + _e('Note: videos that you have previously uploaded to YouTube will not be automatically posted.') + '</p>';
	
	let form = createElement('form');
	form.innerHTML = html;
	
	let label = createElement('label', null, createElement('span', null, __('YouTube channel URL')));
	
	let input = createElement('input');
	Object.assign(input, { type: 'url', placeholder: 'https://www.youtube.com/channel/', value: config.user.youtube || '' });
	
	input.onblur = () => {
		input.value = input.value.trim();
		
		if (input.nextSibling) {
			input.nextSibling.remove();
		}
		
		if (input.value && !isYouTubeChannel(input.value)) {
			label.append(createElement('span', 'error', __('invalid YouTube URL')));
		}
	}
	
	label.append(input);
	
	form.append(label);
	
	view.content.append(form);
	
	view.register('confirm', () => {
		if (input.nextSibling) {
			api.alert(__('Please enter a valid YouTube channel URL or leave the field blank.'), input.focus);
			return;
		}
		
		let url = input.value;
		
		api.post({
			url: '/self',
			data: { youtube: url },
			success: () => {
				config.user.youtube = url || null;
				router.back(false);
			},
			error: (error) => toast(error)
		});
	});
	
	return view;
});
