'use client' import { create } from 'zustand' export interface ThresholdState { speedMin: number speedMax: number dirCenter: number dirRange: number setSpeedMin: (value: number) => void setSpeedMax: (value: number) => void setDirCenter: (value: number) => void setDirRange: (value: number) => void setSpeedRange: (min: number, max: number) => void initFromURL: () => void } // Helper to update URL params const updateURLParams = (params: Record) => { if (typeof window === 'undefined') return const url = new URL(window.location.href) Object.entries(params).forEach(([key, value]) => { url.searchParams.set(key, value) }) window.history.replaceState({}, '', url.toString()) } // Helper to read from URL params const getURLParam = (key: string, defaultValue: number): number => { if (typeof window === 'undefined') return defaultValue const params = new URLSearchParams(window.location.search) const value = params.get(key) return value ? parseFloat(value) : defaultValue } export const useThresholdStore = create((set) => ({ // Default values speedMin: 7, speedMax: 14, dirCenter: 270, dirRange: 15, setSpeedMin: (value) => { set({ speedMin: value }) updateURLParams({ speedMin: value.toString() }) }, setSpeedMax: (value) => { set({ speedMax: value }) updateURLParams({ speedMax: value.toString() }) }, setDirCenter: (value) => { set({ dirCenter: value }) updateURLParams({ dirCenter: value.toString() }) }, setDirRange: (value) => { set({ dirRange: value }) updateURLParams({ dirRange: value.toString() }) }, setSpeedRange: (min, max) => { set({ speedMin: min, speedMax: max }) updateURLParams({ speedMin: min.toString(), speedMax: max.toString() }) }, initFromURL: () => { set({ speedMin: getURLParam('speedMin', 7), speedMax: getURLParam('speedMax', 14), dirCenter: getURLParam('dirCenter', 270), dirRange: getURLParam('dirRange', 15), }) }, }))