import { usePublicKey } from "../AccountProvider/usePublicKey";
import { useDatabase } from "../DatabaseProvider/useDatabase";
import { ProtocolState } from "../ProtocolProvider/ProtocolProvider";
import { useProtocolState } from "../ProtocolProvider/useProtocolState";

export function useUpdateSyncTime() : (timestamp: number) => Promise<void> {
    const [protocolState] = useProtocolState();
    const {runQuery} = useDatabase();
    const publicKey = usePublicKey();

    /**
     * Обновляет время последней синхронизации для аккаунта
     * @param timestamp время
     */
    const updateSyncTime = async (timestamp: number) => {
        if(protocolState == ProtocolState.SYNCHRONIZATION){
            /**
             * Если сейчас идет синхронизация то чтобы при синхронизации
             * не создавать нагрузку на базу данных 
             * по постоянному обновлению, обновляем базу один раз - когда
             * приходит пакет о том что синхронизация закончилась
             */
            return;
        }
        await runQuery(
            "INSERT INTO accounts_sync_times (account, last_sync) VALUES (?, ?) " +
                "ON CONFLICT(account) DO UPDATE SET last_sync = ? WHERE account = ?",
            [publicKey, timestamp, timestamp, publicKey]
        );
    }; 
    
    return updateSyncTime;
}