import { openDB } from 'idb';

export enum EObjectStores {
    Lottie = 'lottie',
}

const objectStores: EObjectStores[] = [EObjectStores.Lottie];

const dbPromise = openDB('aura-store', 1, {
    upgrade(db) {
        db.createObjectStore('lottie');
    },
});

async function get<T>(objectStore: string, key: string): Promise<T> {
    return (await dbPromise).get(objectStore, key);
}
async function set<T>(objectStore: string, key: string, val: T) {
    return (await dbPromise).put(objectStore, val, key);
}
async function del(objectStore: string, key: string) {
    return (await dbPromise).delete(objectStore, key);
}
async function clear() {
    return objectStores.map(async (objectStore: EObjectStores) => {
        return (await dbPromise).clear(objectStore);
    });
}
async function keys() {
    return objectStores.map(async (objectStore: EObjectStores) => {
        return {
            objectStore: objectStore,
            keys: (await dbPromise).getAllKeys(objectStore)
        };
    });
}

export default { get, set, del, clear, keys };