"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.enrichLeafFromBlockscoutApi = enrichLeafFromBlockscoutApi;
exports.enrichLeafUsd = enrichLeafUsd;
const checkpoint_core_1 = require("@dbis/checkpoint-core");
/** Single Blockscout fetch: all transfers + primary token fields on leaf. */
async function enrichLeafFromBlockscoutApi(leaf, blockscoutApi, useBlockscout) {
    if (!useBlockscout)
        return { allErc20: [] };
    const allErc20 = await (0, checkpoint_core_1.fetchAllTokenTransfersForTx)(blockscoutApi, leaf.txHash);
    const primary = (0, checkpoint_core_1.pickPrimaryFromSummaries)(allErc20);
    if (primary) {
        leaf.token = primary.token;
        leaf.tokenSymbol = primary.tokenSymbol;
        leaf.tokenDecimals = primary.tokenDecimals;
        leaf.tokenValue = primary.value;
        leaf.tokenLogIndex = primary.logIndex;
    }
    return { allErc20 };
}
async function enrichLeafUsd(leaf, cfg, preloaded) {
    if (cfg.enabled === false)
        return;
    let allErc20 = preloaded ?? [];
    if (!preloaded?.length && cfg.useBlockscout) {
        allErc20 = await (0, checkpoint_core_1.fetchAllTokenTransfersForTx)(cfg.blockscoutApi, leaf.txHash);
    }
    else if (!preloaded?.length && leaf.token && leaf.tokenValue != null && leaf.tokenValue > 0n) {
        allErc20 = [
            {
                token: leaf.token,
                tokenSymbol: leaf.tokenSymbol || '',
                tokenDecimals: leaf.tokenDecimals ?? 18,
                from: leaf.from,
                to: leaf.to,
                value: leaf.tokenValue,
                logIndex: leaf.tokenLogIndex ?? 0,
            },
        ];
    }
    const record = {
        txHash: leaf.txHash,
        from: leaf.from,
        to: leaf.to,
        value: leaf.value.toString(),
        nativeValueWei: leaf.value.toString(),
        blockNumber: leaf.blockNumber,
        blockTimestamp: leaf.blockTimestamp,
        gasUsed: leaf.gasUsed.toString(),
        success: leaf.success,
        token: leaf.token,
        tokenSymbol: leaf.tokenSymbol,
        tokenDecimals: leaf.tokenDecimals,
        tokenValue: leaf.tokenValue?.toString(),
        tokenLogIndex: leaf.tokenLogIndex,
    };
    const enriched = await (0, checkpoint_core_1.enrichLeafUsdFields)(cfg, record, allErc20);
    if (enriched.valueUsd != null)
        leaf.valueUsd = String(enriched.valueUsd);
    if (enriched.nativeValueUsd != null)
        leaf.nativeValueUsd = String(enriched.nativeValueUsd);
    if (enriched.tokenValueUsd != null)
        leaf.tokenValueUsd = String(enriched.tokenValueUsd);
    if (enriched.nativePriceUsd != null)
        leaf.nativePriceUsd = Number(enriched.nativePriceUsd);
    if (enriched.tokenPriceUsd != null)
        leaf.tokenPriceUsd = Number(enriched.tokenPriceUsd);
    if (enriched.priceSource != null)
        leaf.priceSource = String(enriched.priceSource);
    if (enriched.priceEffectiveTimestamp != null) {
        leaf.priceEffectiveTimestamp = String(enriched.priceEffectiveTimestamp);
    }
    if (enriched.totalTransfersUsd != null)
        leaf.totalTransfersUsd = String(enriched.totalTransfersUsd);
    if (Array.isArray(enriched.transfers))
        leaf.transfers = enriched.transfers;
    if (enriched.usdEnrichedAt != null)
        leaf.usdEnrichedAt = String(enriched.usdEnrichedAt);
}
