/**
 * cityStore — zustand store for city + radius selection.
 *
 * Persisted to localStorage: cityCode ONLY (radius omitted — per §6.3 privacy).
 * Radius is session-volatile state; it resets on store init from localStorage.
 */

import { create } from 'zustand';
import { persist, createJSONStorage } from 'zustand/middleware';

export interface RadiusFilter {
  lat: number;
  lng: number;
  km: number;
}

interface CityState {
  /** City code from active-cities catalog (e.g. 'TEL_AVIV'). null = no city selected. */
  cityCode: string | null;
  /** Radius filter set via UseMyLocationButton. NOT persisted (privacy). */
  radius: RadiusFilter | null;
  /** Set city + clear radius (city selection resets geo-radius). */
  setCity: (code: string | null) => void;
  /** Set radius filter (user granted geolocation). */
  setRadius: (r: RadiusFilter | null) => void;
}

export const useCityStore = create<CityState>()(
  persist(
    (set) => ({
      cityCode: null,
      radius: null,
      setCity: (code) => set({ cityCode: code, radius: null }),
      setRadius: (r) => set({ radius: r }),
    }),
    {
      name: 'md_city',
      storage: createJSONStorage(() => localStorage),
      // radius is NOT persisted — privacy §6.3: geolocation stays session-only
      partialize: (s) => ({ cityCode: s.cityCode }),
    },
  ),
);
