import IdbKvStore from "idb-kv-store";
import { throttle } from "./utils";
const LOCAL_STORAGE_KEY = "webamp_state";

export async function bindToIndexedDB(webamp, clearState, useState) {
  if (!useState) {
    return;
  }
  const localStore = new IdbKvStore("webamp_state_database");

  if (clearState) {
    try {
      await localStore.clear();
    } catch (e) {
      console.log("Failed to clear our IndexeddB state", e);
    }
  }

  let previousSerializedState = null;
  try {
    previousSerializedState = await localStore.get(LOCAL_STORAGE_KEY);
  } catch (e) {
    console.error("Failed to load the saved state from IndexedDB", e);
  }

  if (previousSerializedState != null) {
    webamp.__loadSerializedState(previousSerializedState);
  }

  async function persist() {
    const serializedState = webamp.__getSerializedState();
    try {
      await localStore.set(LOCAL_STORAGE_KEY, serializedState);
    } catch (e) {
      console.log("Failed to save our state to IndexedDB", e);
    }
  }

  webamp.__onStateChange(throttle(persist, 1000));
}
