<template>
	<div class="content-inner">
		<span
			v-if="loading"
			class="summary"
		>Searching...</span>

		<span
			v-if="!loading"
			class="summary"
		>Found {{ actors.length }} actors for '{{ query }}'</span>

		<div
			v-if="!loading && actors.length > 0"
			v-lazy-container="{ selector: '.lazy' }"
			class="tiles"
		>
			<Actor
				v-for="actor in actors"
				:key="`actor-${actor.id}`"
				:actor="actor.aliasFor || actor"
				:alias="actor.aliasFor && actor"
			/>
		</div>

		<span
			v-if="!loading"
			class="summary"
		>Found {{ releases.length }} releases for '{{ query }}'</span>

		<Releases
			v-if="!loading && releases.length > 0"
			class="embedded"
			:releases="releases"
		/>
	</div>
</template>

<script>
import Actor from '../actors/tile.vue';
import Releases from '../releases/releases.vue';

async function search() {
	const results = await this.$store.dispatch('search', {
		query: this.query,
		limit: 100,
	});

	this.loading = false;

	if (results) {
		this.actors = results.actors;
		this.releases = results.releases;
	}
}

function query() {
	return this.$route.query.query || this.$route.query.q;
}

async function mounted() {
	await this.search();
}

async function watchQuery() {
	await this.search();
}

export default {
	components: {
		Actor,
		Releases,
	},
	data() {
		return {
			loading: true,
			actors: [],
			releases: [],
		};
	},
	computed: {
		query,
	},
	watch: {
		query: watchQuery,
	},
	mounted,
	methods: {
		search,
	},
};
</script>

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

.content-inner {
	padding: 1rem;
}

.summary {
    display: block;
    margin: 0 0 1rem 0;
    color: var(--shadow);
    font-weight: bold;
}

.tiles {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr));
    grid-gap: 0 .5rem;
    flex-grow: 1;
	margin: 0 0 1rem 0;
}

@media(max-width: $breakpoint0) {
    .tiles {
        grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
    }
}
</style>