<template>
	<div
		class="banner"
		@wheel.prevent="scrollBanner"
	>
		<div class="trailer">
			<video
				v-if="release.trailer"
				:src="`/media/${release.trailer.path}`"
				:poster="release.poster && (sfw ? `/img/${release.poster.sfw.thumbnail}` : `/media/${release.poster.thumbnail}`)"
				:alt="release.title"
				:class="{ sfw: sfw && paused }"
				class="item trailer-video"
				controls
				@playing="playing = true; paused = false;"
				@pause="playing = false; paused = true;"
			>Sorry, the tailer cannot be played in your browser</video>

			<video
				v-else-if="release.teaser && /^video\//.test(release.teaser.mime)"
				:src="`/media/${release.teaser.path}`"
				:poster="release.poster && (sfw ? `/img/${release.poster.sfw.thumbnail}` : `/media/${release.poster.thumbnail}`)"
				:alt="release.title"
				:class="{ sfw: sfw && paused }"
				class="item trailer-video"
				controls
				@playing="playing = true; paused = false;"
				@pause="playing = false; paused = true;"
			>Sorry, the tailer cannot be played in your browser</video>

			<img
				v-else-if="release.teaser && /^image\//.test(release.teaser.mime)"
				:src="sfw ? `/img/${release.teaser.sfw.thumbnail}` : `/media/${release.teaser.path}`"
				:alt="release.title"
				class="item trailer-video"
			>

			<a
				v-if="release.poster"
				:href="`/media/${release.poster.path}`"
				:class="{ playing }"
				target="_blank"
				rel="noopener noreferrer"
				class="poster-link"
			><Icon icon="image" /></a>

			<span
				v-if="sfw && !playing"
				class="warning"
			>
				<Icon icon="warning2" />NSFW
			</span>
		</div>

		<template v-if="release.covers && release.covers.length > 0">
			<a
				v-for="cover in release.covers"
				:key="`cover-${cover.id}`"
				:href="`/media/${cover.path}`"
				target="_blank"
				rel="noopener noreferrer"
			>
				<img
					:src="`/media/${cover.thumbnail}`"
					class="item cover"
				>
			</a>
		</template>

		<a
			v-for="photo in photos"
			:key="`banner-${photo.index}`"
			:href="`/media/${photo.path}`"
			:class="{ sfw }"
			class="item-link"
			target="_blank"
			rel="noopener noreferrer"
		>
			<img
				:src="sfw ? `/img/${photo.sfw.thumbnail}` : `/media/${photo.thumbnail}`"
				:alt="`Photo ${photo.index + 1}`"
				class="item"
			>

			<span
				v-if="sfw"
				class="warning"
			>
				<Icon icon="warning2" />NSFW
			</span>
		</a>
	</div>
</template>

<script>
function sfw() {
	return this.$store.state.ui.sfw;
}

function photos() {
	if (this.release.trailer || this.release.teaser) {
		// poster will be on trailer video
		return this.release.photos;
	}

	if (this.release.poster) {
		return [this.release.poster].concat(this.release.photos);
	}

	return this.release.photos;
}

function scrollBanner(event) {
	event.currentTarget.scrollLeft += event.deltaY; // eslint-disable-line no-param-reassign
}

export default {
	props: {
		release: {
			type: Object,
			default: null,
		},
	},
	data() {
		return {
			playing: false,
			paused: false,
		};
	},
	computed: {
		photos,
		sfw,
	},
	methods: {
		scrollBanner,
	},
};
</script>

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

.banner {
    background: var(--empty);
    flex-shrink: 0;
    white-space: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
    box-shadow: 0 0 3px var(--shadow);
    font-size: 0;

    &::-webkit-scrollbar {
        display: none;
    }
}

.poster-link {
    position: absolute;
    top: .5rem;
    right: .5rem;
    transition: opacity .1s ease;

    .icon {
        width: 1.5rem;
        height: 1.5rem;
        fill: var(--lighten-strong);
        filter: drop-shadow(0 0 1px var(--darken-weak));
    }

    &.playing {
        opacity: 0;
    }

    &:hover {
        cursor: pointer;
        opacity: 1;

        .icon {
            fill: var(--text-light);
        }
    }
}

.item-link,
.trailer {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;

    .warning {
        display: none;
        width: 100%;
        height: 100%;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        position: absolute;
        background: var(--darken-weak);
        color: var(--text-light);
        font-size: 1.2rem;
        font-weight: bold;
        text-shadow: 0 0 3px var(--darken-strong);
        pointer-events: none;
        animation: alert .5s ease infinite .1s;

        .icon {
            display: block;
            fill: var(--text-light);
            width: 3rem;
            height: 3rem;
            margin: 0 0 .25rem 0;
            filter: drop-shadow(0 0 3px var(--darken));
            animation: alert .5s ease infinite .1s;
        }
    }

    &:hover .warning {
        display: inline-flex;
    }
}

.item {
    height: 18rem;
    vertical-align: middle;
}

.trailer {
    max-width: 100vw;
}

.trailer-video {
    max-width: 100%;
    object-fit: cover;

    &.sfw {
        filter: blur(2rem);
    }
}

@keyframes alert {
    0% {
        color: var(--text-light);
        fill: var(--text-light);
    }
    50% {
        color: var(--alert);
        fill: var(--alert);
    }
}

@media(max-width: $breakpoint2) {
    .trailer-video {
        object-fit: contain;
    }
}
</style>
