<script lang="ts">
import { onMount } from 'svelte';
import { m } from '$lib/paraglide/messages.js';

type Theme = 'light' | 'dark';

function systemPrefersDark(): boolean {
	return window.matchMedia('(prefers-color-scheme: dark)').matches;
}

function resolveInitialTheme(): Theme {
	const saved = localStorage.getItem('theme');
	if (saved === 'light' || saved === 'dark') return saved;
	return systemPrefersDark() ? 'dark' : 'light';
}

let theme = $state<Theme>('light');

onMount(() => {
	theme = resolveInitialTheme();
});

const themeLabel = $derived(
	theme === 'dark' ? m.theme_toggle_to_light() : m.theme_toggle_to_dark()
);

function toggle() {
	theme = theme === 'dark' ? 'light' : 'dark';
	localStorage.setItem('theme', theme);
	document.documentElement.setAttribute('data-theme', theme);
}
</script>

<button
	type="button"
	onclick={toggle}
	aria-label={themeLabel}
	title={themeLabel}
	class="rounded p-1.5 text-white/65 transition-colors hover:bg-white/10 hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring"
>
	{#if theme === 'dark'}
		<!-- Sun icon — click to go light -->
		<svg
			class="h-5 w-5"
			viewBox="0 0 24 24"
			fill="none"
			stroke="currentColor"
			stroke-width="2"
			aria-hidden="true"
		>
			<circle cx="12" cy="12" r="4" />
			<path
				stroke-linecap="round"
				d="M12 2v2M12 20v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M2 12h2M20 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"
			/>
		</svg>
	{:else}
		<!-- Moon icon — click to go dark -->
		<svg
			class="h-5 w-5"
			viewBox="0 0 24 24"
			fill="none"
			stroke="currentColor"
			stroke-width="2"
			aria-hidden="true"
		>
			<path
				stroke-linecap="round"
				stroke-linejoin="round"
				d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"
			/>
		</svg>
	{/if}
</button>
