'use client'
import { __awaiter } from '../../../../../_virtual/_tslib.js';
import { useCallback } from 'react';
import '../../../context/DynamicContext/useDynamicContext/useDynamicContext.js';
import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.js';
import { useViewContext } from '../../../context/ViewContext/ViewContext.js';
import { dynamicEvents } from '../../../events/dynamicEvents.js';
import '@dynamic-labs/sdk-api-core';
import '../../constants/values.js';
import '@dynamic-labs/utils';
import { USER_NOT_LOGGED_IN } from '../../constants/errors.js';
import '@dynamic-labs/multi-wallet';
import '../../../shared/logger.js';
import 'react-international-phone';
import '../../constants/colors.js';
import '@dynamic-labs/iconic';
import '@dynamic-labs/wallet-connector-core';
import 'react/jsx-runtime';
import '@dynamic-labs/wallet-book';
import '../../../shared/consts/index.js';
import '../../../store/state/nonce/nonce.js';
import { isTurnkeyEnabled } from '../../functions/isTurnkeyEnabled/isTurnkeyEnabled.js';
import '@dynamic-labs-wallet/browser-wallet-client';
import '@dynamic-labs-sdk/client/core';
import 'eventemitter3';
import '@dynamic-labs-sdk/client';
import '../../../config/ApiEndpoint.js';
import '@dynamic-labs/locale';
import '../../../store/state/dynamicContextProps/dynamicContextProps.js';
import '../../../store/state/primaryWalletId/primaryWalletId.js';
import '../../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
import '../../functions/getWaasAddressTypeLabel/getWaasAddressTypeLabel.js';
import { useEmbeddedWallet } from '../useEmbeddedWallet/useEmbeddedWallet.js';
import '../../../context/UserWalletsContext/UserWalletsContext.js';
import '../../../context/WalletContext/WalletContext.js';
import '../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
import { useIsTurnkeyWallet } from '../useIsTurnkeyWallet/useIsTurnkeyWallet.js';
import '../../../context/VerificationContext/VerificationContext.js';
import '../../functions/compareChains/compareChains.js';
import '../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';

// Hook exposed to customers and used internally to trigger embedded reveal
const useEmbeddedReveal = () => {
    const { primaryWallet, projectSettings, user, setShowAuthFlow } = useInternalDynamicContext();
    const { userHasEmbeddedWallet } = useEmbeddedWallet();
    const { pushView } = useViewContext();
    const { isTurnkeyWallet } = useIsTurnkeyWallet();
    const turnkeyChecks = ({ user, recoveryPhrase, }) => {
        var _a, _b;
        if (!isTurnkeyEnabled(projectSettings)) {
            throw new Error('Dynamic embedded wallet is not enabled. Go to the dashboard and make sure to have both Dynamic Embedded wallet and at least one EVM network enabled. Also, check if EthereumWalletConnectors is in the  DynamicContextProvider > settings > walletConnectors.');
        }
        if (!userHasEmbeddedWallet()) {
            throw new Error('Dynamic embedded wallet not found');
        }
        const walletProperties = (_b = (_a = user.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'))) === null || _b === void 0 ? void 0 : _b.walletProperties;
        const turnkeyHDWalletId = walletProperties === null || walletProperties === void 0 ? void 0 : walletProperties.turnkeyHDWalletId;
        if (recoveryPhrase && !turnkeyHDWalletId) {
            throw new Error('Wallet is non-HD and does not have a recovery phrase');
        }
    };
    const initExportProcess = useCallback((...args_1) => __awaiter(void 0, [...args_1], void 0, function* (recoveryPhrase = false, isPromptForExport = false, walletId) {
        const targetWalletId = walletId !== null && walletId !== void 0 ? walletId : primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.id;
        if (!targetWalletId) {
            throw new Error('No wallet available for export');
        }
        if (!user) {
            throw new Error(USER_NOT_LOGGED_IN);
        }
        if (isTurnkeyWallet) {
            turnkeyChecks({ recoveryPhrase, user });
        }
        if (!userHasEmbeddedWallet()) {
            throw new Error('Dynamic embedded wallet not found');
        }
        setShowAuthFlow(true, {
            ignoreIfIsEmbeddedWidget: false,
            performMultiWalletChecks: false,
        });
        pushView('embedded-reveal-view', {
            exportPrivateKey: !recoveryPhrase,
            isPromptForExport,
            walletId: targetWalletId,
        });
        return new Promise((resolve, reject) => {
            dynamicEvents.once('embeddedWalletRevealCompleted', (wallet) => resolve(wallet));
            dynamicEvents.once('embeddedWalletRevealFailed', (error) => reject(error));
        });
    }), [primaryWallet, isTurnkeyWallet, setShowAuthFlow, pushView, user]);
    return {
        initExportProcess,
    };
};

export { useEmbeddedReveal };
