<template>
	<div
		v-if="tag"
		class="content"
	>
		<div
			class="tag"
			:class="{ nomedia: !hasMedia }"
		>
			<div class="header">
				<h2 class="title">
					<Icon icon="price-tag4" />
					{{ tag.name }}
				</h2>

				<p
					v-if="description"
					class="description header-description"
					v-html="description"
				/>
			</div>


			<div class="content-inner">
				<Photos
					v-if="hasMedia"
					:tag="tag"
					class="compact"
				/>

				<FilterBar :fetch-releases="fetchReleases" />
				<Releases :releases="tag.releases" />
			</div>
		</div>
	</div>
</template>

<script>
/* eslint-disable no-v-html */
import { Converter } from 'showdown';

import escapeHtml from '../../../src/utils/escape-html';

import FilterBar from '../header/filter-bar.vue';
import Photos from './photos.vue';
import Releases from '../releases/releases.vue';

const converter = new Converter();

async function fetchReleases() {
	this.tag = await this.$store.dispatch('fetchTagBySlug', {
		tagSlug: this.$route.params.tagSlug,
		range: this.$route.params.range,
	});

	this.hasMedia = this.tag.poster || this.tag.photos.length > 0;
	this.description = this.tag.description && converter.makeHtml(escapeHtml(this.tag.description));
}

async function route() {
	await this.fetchReleases();
}

async function mounted() {
	await this.fetchReleases();
	this.pageTitle = this.tag.name;
}

export default {
	components: {
		FilterBar,
		Photos,
		Releases,
	},
	data() {
		return {
			tag: null,
			description: null,
			releases: null,
			pageTitle: null,
			hasMedia: false,
		};
	},
	watch: {
		$route: route,
	},
	mounted,
	methods: {
		fetchReleases,
	},
};
</script>

<style lang="scss" scoped>
@import 'theme';

.tag {
    flex-grow: 1;
    overflow: hidden;

    &.nomedia {
        flex-direction: column;

        .sidebar {
            display: none;
        }

        .header {
            display: flex;
        }
    }
}

.header {
    background: var(--profile);
    color: var(--text-light);
    justify-content: space-between;
    padding: .5rem 1rem;

    .title {
        margin: 0 2rem 0 0;
    }
}

.title {
    padding: 0;
    margin: 0;
    flex-shrink: 0;
    text-transform: capitalize;

    .icon {
        fill: var(--text-light);
        width: 1.25rem;
        height: 1.25rem;
    }
}

.description {
    margin: 0;
    line-height: 1.5;
}

.dark .sidebar {
    border-right: solid 1px var(--shadow-hint);
}
</style>