import { useDatabase } from "@/app/providers/DatabaseProvider/useDatabase";
import { useEffect, useState } from "react";
import { createContext } from "react";
import { TABLES } from "./tables";

export const DatabaseContext = createContext<any>({});

interface DatabaseProviderProps {
    children: React.ReactNode;
}

export function DatabaseProvider(props: DatabaseProviderProps) {
    const [initialized, setInitialized] = useState(false);
    const {runQuery} = useDatabase();

    useEffect(() => {
        (async () => {
            await createAllTables(); 
            setInitialized(true);
            //await runQuery("DROP TABLE IF EXISTS accounts_sync_times");
            /**
             * Удаляем старый индекс только по message_id
             */
            await runQuery("DROP INDEX IF EXISTS idx_messages_message_id");
            
            /**
             * Добавляем уникальный индекс на столбцы message_id и public_key
             * в таблице messages чтобы избежать дубликации сообщений
             */
            await runQuery("CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_message_id_public_key ON messages(message_id, account)");
        })();
    }, []);

    const createAllTables = async () => {
        for(let i = 0; i < TABLES.length; i++){
            await runQuery(TABLES[i]);
        }
    }

    return (
        <DatabaseContext.Provider value={{}}>
            {initialized && props.children}
        </DatabaseContext.Provider>
    );
}