<template>
	<div>
		<nav class="nav">
			<div class="nav-left">
				<router-link class="nav-item is-brand" :to="{ path: '/' }">
					<img
						:src="`${this.siteSettings.logo_white}`"
						:alt="`${this.siteSettings.siteName}` || `Musare`"
					/>
				</router-link>
			</div>

			<div class="nav-center stationDisplayName">
				{{ station.displayName }}
			</div>

			<span class="nav-toggle" v-on:click="controlBar = !controlBar">
				<span />
				<span />
				<span />
			</span>

			<div class="nav-right nav-menu" :class="{ 'is-active': isMobile }">
				<router-link
					v-if="role === 'admin'"
					class="nav-item is-tab admin"
					:to="{ path: '/admin' }"
				>
					<strong>Admin</strong>
				</router-link>
				<span v-if="loggedIn" class="grouped">
					<router-link
						class="nav-item is-tab"
						:to="{ path: '/u/' + username }"
						>Profile</router-link
					>
					<router-link class="nav-item is-tab" to="/settings"
						>Settings</router-link
					>
					<a class="nav-item is-tab" @click="logout()">Logout</a>
				</span>
				<span v-else class="grouped">
					<a
						class="nav-item"
						href="#"
						@click="openModal({ sector: 'header', modal: 'login' })"
						>Login</a
					>
					<a
						class="nav-item"
						href="#"
						@click="
							openModal({ sector: 'header', modal: 'register' })
						"
						>Register</a
					>
				</span>
			</div>
		</nav>
		<div class="control-sidebar" :class="{ 'show-controlBar': controlBar }">
			<div class="inner-wrapper">
				<div v-if="isOwner()">
					<a class="sidebar-item" href="#" @click="settings()">
						<span class="icon">
							<i class="material-icons">settings</i>
						</span>
						<span class="icon-purpose">Station settings</span>
					</a>
					<a
						class="sidebar-item"
						href="#"
						@click="$parent.skipStation()"
					>
						<span class="icon">
							<i class="material-icons">skip_next</i>
						</span>
						<span class="icon-purpose">Skip current song</span>
					</a>
					<a
						v-if="paused"
						class="sidebar-item"
						href="#"
						@click="$parent.resumeStation()"
					>
						<span class="icon">
							<i class="material-icons">play_arrow</i>
						</span>
						<span class="icon-purpose">Resume station</span>
					</a>
					<a
						v-if="!paused"
						class="sidebar-item"
						href="#"
						@click="$parent.pauseStation()"
					>
						<span class="icon">
							<i class="material-icons">pause</i>
						</span>
						<span class="icon-purpose">Pause station</span>
					</a>
					<hr />
				</div>
				<div v-if="loggedIn">
					<a
						v-if="station.type === 'official'"
						class="sidebar-item"
						href="#"
						@click="
							openModal({
								sector: 'station',
								modal: 'addSongToQueue'
							})
						"
					>
						<span class="icon">
							<i class="material-icons">queue</i>
						</span>
						<span class="icon-purpose">Add song to queue</span>
					</a>
					<a
						v-if="!isOwner() && !noSong"
						class="sidebar-item"
						href="#"
						@click="$parent.voteSkipStation()"
					>
						<span class="icon">
							<i class="material-icons">skip_next</i>
						</span>
						<span class="skip-votes">{{
							currentSong.skipVotes
						}}</span>
						<span class="icon-purpose">Skip current song</span>
					</a>
					<a
						v-if="!noSong && !currentSong.simpleSong"
						class="sidebar-item"
						href="#"
						@click="
							openModal({
								sector: 'station',
								modal: 'report'
							})
						"
					>
						<span class="icon">
							<i class="material-icons">report</i>
						</span>
						<span class="icon-purpose">Report a song</span>
					</a>
					<a
						v-if="!noSong"
						class="sidebar-item"
						href="#"
						@click="
							openModal({
								sector: 'station',
								modal: 'addSongToPlaylist'
							})
						"
					>
						<span class="icon">
							<i class="material-icons">playlist_add</i>
						</span>
						<span class="icon-purpose"
							>Add current song to playlist</span
						>
					</a>
					<hr v-if="!noSong" />
				</div>
				<a
					v-if="
						station.partyMode === true ||
							station.type === 'official'
					"
					class="sidebar-item"
					href="#"
					@click="$parent.toggleSidebar('songslist')"
				>
					<span class="icon">
						<i class="material-icons">queue_music</i>
					</span>
					<span class="icon-purpose">Show the station queue</span>
				</a>
				<a
					class="sidebar-item"
					href="#"
					@click="$parent.toggleSidebar('users')"
				>
					<span class="icon">
						<i class="material-icons">people</i>
					</span>
					<span class="icon-purpose"
						>Display users in the station</span
					>
				</a>
				<a
					v-if="loggedIn && station.type === 'community'"
					class="sidebar-item"
					href="#"
					@click="$parent.toggleSidebar('playlist')"
				>
					<span class="icon">
						<i class="material-icons">library_music</i>
					</span>
					<span class="icon-purpose">Show your playlists</span>
				</a>
			</div>
		</div>
	</div>
</template>

<script>
import { mapState, mapActions } from "vuex";

export default {
	data() {
		return {
			title: this.$route.params.id,
			isMobile: false,
			controlBar: false,
			frontendDomain: "",
			siteSettings: {
				logo: "",
				siteName: ""
			}
		};
	},
	computed: mapState({
		loggedIn: state => state.user.auth.loggedIn,
		userId: state => state.user.auth.userId,
		username: state => state.user.auth.username,
		role: state => state.user.auth.role,
		station: state => state.station.station,
		paused: state => state.station.paused,
		noSong: state => state.station.noSong,
		currentSong: state => state.station.currentSong
	}),
	mounted() {
		lofig.get("frontendDomain").then(frontendDomain => {
			this.frontendDomain = frontendDomain;
		});

		lofig.get("siteSettings").then(siteSettings => {
			this.siteSettings = siteSettings;
		});
	},
	methods: {
		isOwner() {
			return (
				this.loggedIn &&
				(this.role === "admin" || this.userId === this.station.owner)
			);
		},
		settings() {
			this.editStation({
				_id: this.station._id,
				name: this.station.name,
				type: this.station.type,
				partyMode: this.station.partyMode,
				description: this.station.description,
				privacy: this.station.privacy,
				displayName: this.station.displayName,
				locked: this.station.locked
			});
			this.openModal({
				sector: "station",
				modal: "editStation"
			});
		},
		...mapActions("modals", ["openModal"]),
		...mapActions("station", ["editStation"]),
		...mapActions("user/auth", ["logout"])
	}
};
</script>

<style lang="scss" scoped>
@import "styles/global.scss";

.nav {
	background-color: $primary-color;
	line-height: 64px;
	border-radius: 0% 0% 33% 33% / 0% 0% 7% 7%;

	.is-brand {
		font-size: 2.1rem !important;
		line-height: 38px !important;
		padding: 0 20px;
		font-family: Pacifico, cursive;

		img {
			max-height: 38px;
			color: $musareBlue;
		}
	}
}

a.nav-item {
	color: $white;
	font-size: 17px;

	&:hover {
		color: $white;
	}

	padding: 0 12px;
	.icon {
		height: 64px;
		i {
			font-size: 2rem;
			line-height: 64px;
			height: 64px;
			width: 34px;
		}
	}
}

a.nav-item.is-tab:hover {
	border-bottom: none;
	border-top: solid 1px $white;
}

.admin strong {
	color: $purple;
}

.grouped {
	margin: 0;
	display: flex;
	text-decoration: none;
}

.skip-votes {
	position: relative;
	left: 11px;
}

.nav-toggle {
	height: 64px;
}

@media screen and (max-width: 998px) {
	.nav-menu {
		background-color: $white;
		box-shadow: 0 4px 7px rgba(10, 10, 10, 0.1);
		left: 0;
		display: none;
		right: 0;
		top: 100%;
		position: absolute;
	}
	.nav-toggle {
		display: block;
	}
}

.logo {
	font-size: 2.1rem;
	line-height: 64px;
	padding-left: 20px !important;
	padding-right: 20px !important;
}

.nav-center {
	display: flex;
	align-items: center;
	color: $primary-color;
	font-size: 22px;
	position: absolute;
	margin: auto;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

.nav-right.is-active .nav-item {
	background: $primary-color;
	border: 0;
}

.hidden {
	display: none;
}

.control-sidebar {
	position: fixed;
	z-index: 1;
	top: 0;
	left: 0;
	width: 64px;
	height: 100vh;
	background-color: $primary-color;
	box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16),
		0 2px 10px 0 rgba(0, 0, 0, 0.12);

	@media (max-width: 998px) {
		display: none;
	}
	.inner-wrapper {
		@media (min-width: 999px) {
			.mobile-only {
				display: none;
			}
			.desktop-only {
				display: flex;
			}
		}
		@media (max-width: 998px) {
			.mobile-only {
				display: flex;
			}
			.desktop-only {
				display: none;
				visibility: hidden;
			}
		}
	}
}

.show-controlBar {
	display: block;
}

.inner-wrapper {
	top: 64px;
	position: relative;
}

.control-sidebar .material-icons {
	width: 100%;
	font-size: 2rem;
}
.control-sidebar .sidebar-item {
	font-size: 2rem;
	height: 50px;
	color: $white;
	-webkit-box-align: center;
	-ms-flex-align: center;
	align-items: center;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-flex: 0;
	-ms-flex-positive: 0;
	flex-grow: 0;
	-ms-flex-negative: 0;
	flex-shrink: 0;
	-webkit-box-pack: center;
	-ms-flex-pack: center;
	justify-content: center;
	width: 100%;
	position: relative;
}
.control-sidebar .sidebar-top-hr {
	margin: 0 0 20px 0;
}

.sidebar-item .icon-purpose {
	visibility: hidden;
	width: 160px;
	font-size: 12px;
	background-color: rgba(3, 169, 244, 0.8);
	color: $white;
	text-align: center;
	border-radius: 6px;
	padding: 5px;
	position: absolute;
	z-index: 1;
	left: 115%;
	opacity: 0;
	transition: opacity 0.5s;
	display: none;
}

.sidebar-item .icon-purpose::after {
	content: "";
	position: absolute;
	top: 50%;
	right: 100%;
	margin-top: -5px;
	border-width: 5px;
	border-style: solid;
	border-color: transparent rgba(3, 169, 244, 0.8) transparent transparent;
}

.sidebar-item:hover .icon-purpose {
	visibility: visible;
	opacity: 1;
	display: block;
}
</style>