import { getDefaultStore } from 'jotai';
import { createJSONStorage } from 'jotai/utils';

export type AtomStore = ReturnType<typeof getDefaultStore>;
let atomStore: AtomStore | null = null;

export const getAtomStore = (): AtomStore => {
  if (!atomStore) {
    atomStore = getDefaultStore();
  }
  return atomStore;
};

/**
 * @internal
 *
 * Sets the global atom store to be the provided store.
 *
 * @param store - The store to set the global atom store to.
 */
export const setAtomStoreForTesting = (store: AtomStore) => {
  atomStore = store;
};

/**
 * @internal
 *
 * Resets the global atom store to null
 */
export const resetAtomStore = () => {
  atomStore = null;
};

export const sessionStorageUtil = createJSONStorage<string | undefined>(() => sessionStorage);
