import React from "react";

export type UseLocalStorageParam<
    T extends { [key: string]: any } = { [key: string]: any }
> = {
    key: keyof T;
};

/**
 * # Use Local Storage
 */
export default function useLocalStorage<
    T extends Record<string, any> | undefined = undefined
>(param?: UseLocalStorageParam) {
    const [data, setData] =
        React.useState<T extends undefined ? string | null : T>();

    React.useEffect(() => {
        if (param?.key) {
            const value = localStorage.getItem(param.key as string);
            try {
                const jsonValue = JSON.parse(value || "");
                setData(jsonValue as any);
            } catch (error) {
                setData(value as any);
            }
        }
    }, []);

    return { data };
}
