"use client";

type Serializable =
  | string
  | number
  | boolean
  | null
  | undefined
  | object
  | Array<unknown>;

export async function getStoreData<T = string | null>(key: string) {
  try {
    const data = localStorage.getItem(key);
    if (data === null) return null;

    try {
      return JSON.parse(data) as T;
    } catch {
      return data as T;
    }
  } catch (error) {
    console.error("Error reading from localStorage:", error);
  }
}

export async function setStoreData<T extends Serializable>(
  key: string,
  data: T
) {
  try {
    const value = typeof data === "string" ? data : JSON.stringify(data);
    localStorage.setItem(key, value);
  } catch (error) {
    console.error("Error writing to localStorage:", error);
  }
}

export async function removeStoreData(key: string) {
  try {
    localStorage.removeItem(key);
  } catch (error) {
    console.error("Error removing from localStorage:", error);
  }
}
