<script context="module">
	import { Template, Story } from "@storybook/addon-svelte-csf";
	import Gallery from "./Index.svelte";
	import { allModes } from "../storybook/modes";
	import { within } from "@testing-library/dom";
	import { userEvent } from "@storybook/test";

	export const meta = {
		title: "Components/Gallery",
		component: Gallery,
		argTypes: {
			label: {
				control: "text",
				description: "The gallery label",
				name: "label",
				value: "Gradio Button"
			},
			show_label: {
				options: [true, false],
				description: "Whether to show the label",
				control: { type: "boolean" },
				defaultValue: true
			},
			columns: {
				options: [1, 2, 3, 4],
				description: "The number of columns to show in grid",
				control: { type: "select" },
				defaultValue: 2
			},
			rows: {
				options: [1, 2, 3, 4],
				description: "The number of rows to show in grid",
				control: { type: "select" },
				defaultValue: 2
			},
			height: {
				options: ["auto", 500, 600],
				description: "The height of the grid",
				control: { type: "select" },
				defaultValue: "auto"
			},
			preview: {
				options: [true, false],
				description: "Whether to start the gallery in preview mode",
				control: { type: "boolean" },
				defaultValue: true
			},
			allow_preview: {
				options: [true, false],
				description: "Whether to allow a preview mode in the gallery",
				control: { type: "boolean" },
				defaultValue: true
			},
			object_fit: {
				options: ["contain", "cover", "fill", "none", "scale-down"],
				description: "How to display each indivial image in the grid",
				control: { type: "select" },
				defaultValue: "contain"
			},
			show_share_button: {
				options: [true, false],
				description: "Whether to show the share button in the gallery",
				control: { type: "boolean" },
				defaultValue: false
			}
		},
		parameters: {
			chromatic: {
				modes: {
					desktop: allModes["desktop"],
					mobile: allModes["mobile"]
				}
			}
		}
	};
</script>

<Template let:args>
	<Gallery
		value={[
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah_running.avif",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah_running.avif",
					orig_name: "cheetah_running.avif"
				},
				caption: "A fast cheetah"
			},
			{
				video: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/world.mp4",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/world.mp4",
					orig_name: "world.mp4"
				},
				caption: "The world"
			},
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah-002.jpg",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah-002.jpg",
					orig_name: "cheetah-002.jpg"
				}
			},
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah-003.jpg",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah-003.jpg",
					orig_name: "cheetah-003.jpg"
				}
			},
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah3.webp",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/cheetah3.webp",
					orig_name: "cheetah3.webp"
				}
			},
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/ghepardo-primo-piano.jpg",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/ghepardo-primo-piano.jpg",
					orig_name: "ghepardo-primo-piano.jpg"
				}
			},
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/main-qimg-0bbf31c18a22178cb7a8dd53640a3d05-lq.jpeg",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/main-qimg-0bbf31c18a22178cb7a8dd53640a3d05-lq.jpeg",
					orig_name: "main-qimg-0bbf31c18a22178cb7a8dd53640a3d05-lq.jpeg"
				}
			},
			{
				image: {
					path: "https://gradio-builds.s3.amazonaws.com/demo-files/TheCheethcat.jpg",
					url: "https://gradio-builds.s3.amazonaws.com/demo-files/TheCheethcat.jpg",
					orig_name: "TheCheethcat.jpg"
				}
			}
		]}
		{...args}
	/>
</Template>

<Story
	name="Gallery with label"
	args={{ label: "My Cheetah Gallery", show_label: true }}
	play={async ({ canvasElement }) => {
		const canvas = within(canvasElement);

		const image = canvas.getByLabelText("Thumbnail 1 of 8");
		await userEvent.click(image);
		const expand_btn = canvas.getByRole("button", {
			name: "View in full screen"
		});
		await userEvent.click(expand_btn);
	}}
/>
<Story
	name="Gallery without label"
	args={{ label: "My Cheetah Gallery", show_label: false }}
/>
<Story
	name="Gallery with rows=3 and columns=3"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		rows: 3,
		columns: 3
	}}
/>
<Story
	name="Gallery with columns=4"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		columns: 4
	}}
/>
<Story
	name="Gallery with height=600"
	args={{
		label: "My Cheetah Gallery",
		height: 600
	}}
/>
<Story
	name="Gallery with allow_preview=false"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		allow_preview: false
	}}
/>
<Story
	name="Gallery with preview"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		preview: true
	}}
/>
<Story
	name="Gallery with object_fit=scale-down"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		object_fit: "scale-down"
	}}
/>
<Story
	name="Gallery with object_fit=contain"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		object_fit: "contain"
	}}
/>
<Story
	name="Gallery with object_fit=cover"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		object_fit: "cover"
	}}
/>
<Story
	name="Gallery with object_fit=none"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		object_fit: "none"
	}}
/>
<Story
	name="Gallery with object_fit=fill"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		object_fit: "fill"
	}}
/>
<Story
	name="Gallery with share button"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		show_share_button: true
	}}
/>

<Story
	name="Gallery with overflow of images"
	args={{
		label: "My Cheetah Gallery",
		show_label: true,
		rows: 2,
		columns: 2,
		height: 400
	}}
/>

<Story
	name="Gallery with download button"
	args={{
		label: "My Cheetah Gallery",
		rows: 2,
		height: 400,
		show_download_button: true
	}}
/>
