<script setup lang="ts">
import { Monitor, Moon, Sun } from '@lucide/vue';
import { useAppearance } from '@/composables/useAppearance';

const { appearance, updateAppearance } = useAppearance();

const tabs = [
    { value: 'light', Icon: Sun, label: 'Light' },
    { value: 'dark', Icon: Moon, label: 'Dark' },
    { value: 'system', Icon: Monitor, label: 'System' },
] as const;
</script>

<template>
    <div class="appearance-tabs">
        <button
            v-for="{ value, Icon, label } in tabs"
            :key="value"
            @click="updateAppearance(value)"
            :class="[
                'appearance-tabs__tab',
                { 'appearance-tabs__tab--active': appearance === value },
            ]"
        >
            <component :is="Icon" class="appearance-tabs__icon" />
            <span class="appearance-tabs__label">{{ label }}</span>
        </button>
    </div>
</template>

<style scoped>
@reference "../../css/app.css";

.appearance-tabs {
    @apply inline-flex gap-1 rounded-lg bg-neutral-100 p-1 dark:bg-neutral-800;
}

.appearance-tabs__tab {
    @apply flex items-center rounded-md px-3.5 py-1.5 text-neutral-500 transition-colors hover:bg-neutral-200/60 hover:text-black dark:text-neutral-400 dark:hover:bg-neutral-700/60;
}

.appearance-tabs__tab--active {
    @apply bg-white shadow-xs hover:bg-white dark:bg-neutral-700 dark:text-neutral-100 dark:hover:bg-neutral-700;
}

.appearance-tabs__icon {
    @apply -ml-1 h-4 w-4;
}

.appearance-tabs__label {
    @apply ml-1.5 text-sm;
}
</style>
