import { createStore } from "zustand/vanilla";

import type { ThemeMode, ThemePreset } from "@/types/preferences/theme";
import type { SidebarVariant, SidebarCollapsible, ContentLayout } from "@/types/preferences/layout";

export type PreferencesState = {
  themeMode: ThemeMode;
  themePreset: ThemePreset;
  sidebarVariant: SidebarVariant;
  sidebarCollapsible: SidebarCollapsible;
  contentLayout: ContentLayout;
  setThemeMode: (mode: ThemeMode) => void;
  setThemePreset: (preset: ThemePreset) => void;
  setSidebarVariant: (variant: SidebarVariant) => void;
  setSidebarCollapsible: (collapsible: SidebarCollapsible) => void;
  setContentLayout: (layout: ContentLayout) => void;
};

export const createPreferencesStore = (init?: Partial<PreferencesState>) =>
  createStore<PreferencesState>()((set) => ({
    themeMode: init?.themeMode ?? "dark",
    themePreset: init?.themePreset ?? "default",
    sidebarVariant: init?.sidebarVariant ?? "floating",
    sidebarCollapsible: init?.sidebarCollapsible ?? "offcanvas",
    contentLayout: init?.contentLayout ?? "full-width",
    setThemeMode: (mode) => set({ themeMode: mode }),
    setThemePreset: (preset) => set({ themePreset: preset }),
    setSidebarVariant: (variant) => set({ sidebarVariant: variant }),
    setSidebarCollapsible: (collapsible) => set({ sidebarCollapsible: collapsible }),
    setContentLayout: (layout) => set({ contentLayout: layout }),
  }));
