<template>
	<ul
		class="movies nolist"
		:class="{ disabled: !editing.has(item.key) }"
	>
		<li
			v-for="movie in [...item.value, ...newMovies]"
			:key="`movie-${movie.id}`"
			class="movie"
			:class="{ deleted: edits.movies && !edits.movies.some((movieId) => movieId === movie.id) }"
		>
			<span class="movie-name">{{ movie.title }}</span>

			<Icon
				v-if="edits.movies && !edits.movies.some((movieId) => movieId === movie.id)"
				icon="checkmark"
				class="add"
				@click="emit('movies', edits.movies.concat(movie.id))"
			/>

			<Icon
				v-else
				icon="cross2"
				class="remove"
				@click="emit('movies', edits.movies.filter((movieId) => movieId !== movie.id))"
			/>
		</li>

		<li class="new">
			<MovieSearch
				:disabled="!editing.has(item.key)"
				@movie="addMovie"
			>
				<Icon
					icon="plus3"
					class="add"
				/>
			</MovieSearch>
		</li>
	</ul>
</template>

<script setup>
import { ref, watch } from 'vue';

import MovieSearch from '#/components/movies/search.vue';

const newMovies = ref([]);

const props = defineProps({
	item: {
		type: Object,
		default: null,
	},
	scene: {
		type: Object,
		default: null,
	},
	edits: {
		type: Object,
		default: () => {},
	},
	editing: {
		type: Set,
		default: null,
	},
});

const emit = defineEmits(['movies']);

function addMovie(movie) {
	newMovies.value = newMovies.value.concat(movie);

	console.log(movie);

	emit('movies', props.edits.movies.concat(movie.id));

	console.log(props.edits);
}

watch(() => props.scene, () => { newMovies.value = []; });
</script>

<style scoped>
.movies {
	display: flex;
	flex-wrap: wrap;
	gap: .35rem .25rem;

	&.disabled {
		.movie {
			background: var(--glass-weak-50);
			color: var(--glass-strong-10);

			.remove,
			.add {
				fill: var(--shadow-weak-30);
				background: var(--shadow-weak-50);
			}
		}

		.new .icon {
			background: var(--shadow-weak-40);
		}
	}

	.new {
		display: flex;
		align-items: center;
		margin-left: .25rem;

		&:hover {
			box-shadow: 0 0 3px var(--shadow-weak-20);
		}

		.icon {
			height: 100%;
			padding: 0 .5rem;
			background: var(--success);
			fill: var(--text-light);
		}
	}
}

.movie {
	display: flex;
	align-items: stretch;
	border-radius: .25rem;
	background: var(--background);
	box-shadow: 0 0 3px var(--shadow-weak-30);

	&.deleted  {
		color: var(--glass);
		text-decoration: line-through;
	}
}

.movie,
.new {
	.remove,
	.add {
		height: auto;
		padding: .25rem .3rem;
		border-radius: .25rem;
		fill: var(--highlight-strong-10);

		&:hover {
			fill: var(--text-light);
			cursor: pointer;
		}
	}

	.remove {
		fill: var(--error);

		&:hover {
			background: var(--error);
		}
	}

	.add {
		fill: var(--success);

		&:hover {
			background: var(--success);
		}
	}
}

.movie-name {
	padding: .25rem .5rem;
}
</style>
