import { describe, it, expect, vi, afterEach } from 'vitest';
import { cleanup, render } from 'vitest-browser-svelte';
import { page } from 'vitest/browser';
import TimelineControls from './TimelineControls.svelte';

afterEach(cleanup);

describe('TimelineControls', () => {
	it('renders neither button when not zoomed and no selection', async () => {
		render(TimelineControls, {
			props: {
				isZoomed: false,
				hasSelection: false,
				onresetzoom: () => {},
				onclearselection: () => {}
			}
		});

		const buttons = document.querySelectorAll('button');
		expect(buttons.length).toBe(0);
	});

	it('renders the reset-zoom button when isZoomed is true', async () => {
		render(TimelineControls, {
			props: {
				isZoomed: true,
				hasSelection: false,
				onresetzoom: () => {},
				onclearselection: () => {}
			}
		});

		await expect.element(page.getByRole('button', { name: /zur übersicht/i })).toBeVisible();
	});

	it('renders the clear-selection button when hasSelection is true', async () => {
		render(TimelineControls, {
			props: {
				isZoomed: false,
				hasSelection: true,
				onresetzoom: () => {},
				onclearselection: () => {}
			}
		});

		await expect.element(page.getByRole('button', { name: /auswahl zurücksetzen/i })).toBeVisible();
	});

	it('renders both buttons when both flags are true', async () => {
		render(TimelineControls, {
			props: {
				isZoomed: true,
				hasSelection: true,
				onresetzoom: () => {},
				onclearselection: () => {}
			}
		});

		const buttons = document.querySelectorAll('button');
		expect(buttons.length).toBe(2);
	});

	it('calls onresetzoom when the reset button is clicked', async () => {
		const onresetzoom = vi.fn();
		render(TimelineControls, {
			props: { isZoomed: true, hasSelection: false, onresetzoom, onclearselection: () => {} }
		});

		await page.getByRole('button', { name: /zur übersicht/i }).click();

		expect(onresetzoom).toHaveBeenCalledOnce();
	});

	it('calls onclearselection when the clear button is clicked', async () => {
		const onclearselection = vi.fn();
		render(TimelineControls, {
			props: { isZoomed: false, hasSelection: true, onresetzoom: () => {}, onclearselection }
		});

		await page.getByRole('button', { name: /auswahl zurücksetzen/i }).click();

		expect(onclearselection).toHaveBeenCalledOnce();
	});
});
