import { WritableAtom } from 'jotai';
import {
  atomWithLocalStorage,
  getLocalStorageItem,
  setLocalStorageItem,
} from './utils/atomWithLocalStorage';

export type CallPreferences = {
  microphone: boolean;
  video: boolean;
  sound: boolean;
};

const CALL_PREFERENCES = 'callPreferences';

const DEFAULT_PREFERENCES: CallPreferences = {
  microphone: true,
  video: false,
  sound: true,
};

export type CallPreferencesAtom = WritableAtom<CallPreferences, [CallPreferences], undefined>;

export const makeCallPreferencesAtom = (userId: string): CallPreferencesAtom => {
  const storeKey = `${CALL_PREFERENCES}${userId}`;

  const callPreferencesAtom = atomWithLocalStorage<CallPreferences>(
    storeKey,
    (key) => {
      const v = getLocalStorageItem<CallPreferences>(key, DEFAULT_PREFERENCES);
      // Never restore camera state — always start with camera off for privacy.
      // Users can toggle it in the prescreen before joining.
      return { ...v, video: false };
    },
    (key, value) => {
      // Don't persist video state — always resets to off on next load.
      setLocalStorageItem(key, { ...value, video: false });
    },
  );

  return callPreferencesAtom;
};
