<script>
import Simplebar from 'simplebar-vue';

import SpotIcon from '@components/spotIcon';
import ProjectNewsletter from '@components/projectNewsletter';
import logoIconUrl from '@images/icons/favicon.svg';
import logoTitleUrl from '@images/logo_title.svg';

export default {
	components: {
		SpotIcon,
		ProjectNewsletter,
		Simplebar
	},
	props: {
		projects: Array,
		projectCodeName: String,
		baseMaps: Array,
		baseMap: String,
		mapInitializing: Boolean,
		hikes: Object
	},
	data() {
		return {
			isOpen: false,
			lastUpdate: {unix_time: 0, relative_time: '', formatted_time: ''},
			logoIconUrl,
			logoTitleUrl
		};
	},
	emits: ['update:baseMap', 'update:projectCodeName', 'toggle'],
	inject: ['api', 'lang', 'user', 'consts', 'isMobile', 'hash'],
	computed: {
		project() {
			return this.projects.find((project) => project.codename == this.projectCodeName);
		},
		projectCodeNameModel: {
			get() {
				return this.projectCodeName;
			},
			set(sProjectCodeName) {
				this.$emit('update:projectCodeName', sProjectCodeName);
			}
		},
		baseMapModel: {
			get() {
				return this.baseMap;
			},
			set(sBaseMap) {
				this.$emit('update:baseMap', sBaseMap);
			}
		}
	},
	watch: {
		projectCodeName() {
			this.setLastUpdate();
		}
	},
	mounted() {
		this.setLastUpdate();
	},
	methods: {
		async setLastUpdate() {
			if(this.project?.mode == this.consts.modes.blog) {
				this.lastUpdate = await this.api.get('last_update', {id_project: this.project.id});
			}
		},
		toggle(bShow, iAnimDuration=500) {
			this.isOpen = (typeof bShow == 'boolean')?bShow:(!this.isOpen);
			this.$emit('toggle', this.isOpen, iAnimDuration);
			return this.isOpen;
		},
		getWidth() {
			return this.$el.getBoundingClientRect().width;
		}
	}
}
</script>

<template>
	<div id="settings" class="panel panel-left">
		<div id="settings-panel" class="panel-content">
			<div class="settings-header settings-box">
				<img :src="logoIconUrl" class="logo-icon clickable" :title="lang.get('project.overview')" @click="hash.items = []" />
				<img :src="logoTitleUrl" class="logo-title" :alt="consts.title" />
				<div class="last_update" v-if="project?.mode == consts.modes.blog && lastUpdate.unix_time > 0" :title="lastUpdate.formatted_time">
					<SpotIcon icon="find-me-spot" :text="lang.get('feed.last_update')+' '+lastUpdate.relative_time" />
				</div>
			</div>
			<div class="settings-sections">
				<Simplebar id="settings-sections-scrollbox">
					<div class="settings-section settings-box">
						<h1><SpotIcon :icon="'project'" width="fixed" :text="lang.get('project.hikes')" /></h1>
						<div class="settings-section-body">
							<div class="radio" v-for="project in projects" :key="'project-'+project.id">
								<input type="radio" :id="'project-'+project.id" :value="project.codename" v-model="projectCodeNameModel" :disabled="mapInitializing" />
								<label :for="'project-'+project.id">
									<span>{{ project.name }}</span>
									<a v-if="!isMobile() && project.gpxfilepath" class="download" :href="project.gpxfilepath" :download="project.codename + '.gpx'" :title="lang.get('track.download')" @click.stop="()=>{}">
										<SpotIcon :icon="'download'" margin="left" />
									</a>
								</label>
							</div>
						</div>
					</div>
					<div class="settings-section settings-box">
						<h1><SpotIcon :icon="'map'" width="fixed" :text="lang.get('map.title')" /></h1>
						<div class="settings-section-body">
							<div class="radio" v-for="bm in baseMaps" :key="'map-'+bm.id_map">
								<input type="radio" :id="'map-'+bm.id_map" :value="bm.codename" v-model="baseMapModel" :disabled="mapInitializing" />
								<label :for="'map-'+bm.id_map">{{ lang.get('map.'+bm.codename) }}</label>
							</div>
						</div>
					</div>
					<div class="settings-section settings-box newsletter">
						<h1><SpotIcon :icon="'newsletter'" width="fixed" :text="lang.get('newsletter.title')" /></h1>
						<div class="settings-section-body">
							<ProjectNewsletter />
						</div>
					</div>
					<div class="settings-section settings-box admin" v-if="user.hasClearance(consts.clearances.admin)">
						<h1><SpotIcon :icon="'admin'" width="fixed" :text="lang.get('admin.title')" /></h1>
						<div class="settings-section-body admin-actions">
							<a class="button" href="#admin"><SpotIcon :icon="'config'" :text="lang.get('admin.config')" /></a>
							<a class="button" href="#upload"><SpotIcon :icon="'upload'" :text="lang.get('admin.upload')" /></a>
						</div>
					</div>
				</Simplebar>
			</div>
			<div v-if="!isMobile()" class="settings-footer">
				<a href="https://git.lutran.fr/franzz/spot" :title="lang.get('credits.git')" target="_blank" rel="noopener">
					<SpotIcon :icon="'credits'" width="auto" :text="lang.get('credits.project', consts.title)" />
				</a>
				<span>&nbsp;{{ lang.get('credits.license') }}</span>
			</div>
		</div>
		<div :class="'panel-control panel-control-'+(isMobile()?'bottom':'top')">
			<div class="panel-control-elem panel-control-icon" @click="toggle">
				<SpotIcon :icon="isOpen?'prev':'menu'" />
			</div>
		</div>
		<div v-if="project?.id && !isMobile()" id="legend" class="panel-control panel-control-bottom">
			<div class="panel-control-elem">
				<div v-for="(color, hikeType) in hikes.colors" class="track">
					<span class="line" :style="'background-color:'+color+';'"></span>
					<span class="desc">{{ lang.get('track.'+hikeType) }}</span>
				</div>
			</div>
		</div>
		<div v-if="project?.id" id="title" :class="'panel-control panel-control-'+(isMobile()?'bottom':'top')">
			<div class="panel-control-elem"><span>{{ project.name }}</span></div>
		</div>
	</div>
</template>
