import * as React from 'react';
import { Observer, Provider } from 'mobx-react';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { NavigationContainer, DarkTheme } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import {
    SafeAreaProvider,
    SafeAreaView,
    initialWindowMetrics
} from 'react-native-safe-area-context';
import {
    BackHandler,
    NativeEventSubscription,
    Platform,
    StatusBar,
    AppState
} from 'react-native';

import {
    activityStore,
    alertStore,
    balanceStore,
    cashuStore,
    channelBackupStore,
    channelsStore,
    connectivityStore,
    contactStore,
    feeStore,
    fiatStore,
    inventoryStore,
    invoicesStore,
    lightningAddressStore,
    lnurlPayStore,
    lspStore,
    messageSignStore,
    modalStore,
    nodeInfoStore,
    notesStore,
    offersStore,
    paymentsStore,
    posStore,
    settingsStore,
    swapStore,
    syncStore,
    transactionsStore,
    unitsStore,
    utxosStore,
    sweepStore,
    nostrWalletConnectStore
} from './stores/Stores';
import NavigationService from './NavigationService';
import PushNotificationManager from './PushNotificationManager';
import StealthModeUtils from './utils/StealthModeUtils';
import StealthModeWrapper from './components/StealthModeWrapper';
import { AppContainer } from './components/layout/AppContainer';
import CopiedToastHost from './components/CopiedToast';
import AlertModal from './components/Modals/AlertModal';
import ExternalLinkModal from './components/Modals/ExternalLinkModal';
import AndroidNfcModal from './components/Modals/AndroidNfcModal';
import InfoModal from './components/Modals/InfoModal';
import ShareModal from './components/Modals/ShareModal';
import NewChannelModal from './components/Modals/NewChannelModal';
import GraphSyncPromptModal from './components/Modals/GraphSyncPromptModal';
import RatingModal from './components/Modals/RatingModal';
import RestoreChannelModal from './components/Modals/RestoreChannelModal';

// Views
import Transaction from './views/Transaction';
import Wallet from './views/Wallet/Wallet';
import Send from './views/Send';
import LnurlPay from './views/LnurlPay/LnurlPay';
import ClinkPay from './views/ClinkPay/ClinkPay';
import LnurlChannel from './views/LnurlChannel';
import LnurlAuth from './views/LnurlAuth';
import Receive from './views/Receive';
import PaymentRequest from './views/PaymentRequest';
import HandleAnythingQRScanner from './views/HandleAnythingQRScanner';
import SwapsQRScanner from './views/SwapsQRScanner';
import RefundSwapQRScanner from './views/RefundSwapQRScanner';
import NodeQRScanner from './views/NodeQRScanner';
import OpenChannel from './views/OpenChannel';
import SendingOnChain from './views/SendingOnChain';
import VerifyOnChain from './views/VerifyOnChain';
import SendingLightning from './views/SendingLightning';
import Channel from './views/Channels/Channel';
import Payment from './views/Payment';
import PaymentPaths from './views/PaymentPaths';
import Invoice from './views/Invoice';
import OnChainAddresses from './views/OnChainAddresses';
import DonateToZEUS from './views/DonateToZEUS';
import ChangeDonationSettings from './views/ChangeDonationSettings';

import NodeInfo from './views/NodeInfo';
import Lockscreen from './views/Lockscreen';
import NostrContacts from './views/NostrContacts';
import MultiQR from './views/MultiQR';

// Settings views
import Settings from './views/Settings/Settings';
import WalletConfiguration from './views/Settings/WalletConfiguration';
import Wallets from './views/Settings/Wallets';
import Networking from './views/Settings/Networking';
import Privacy from './views/Settings/Privacy';
import StealthMode from './views/Settings/StealthMode';
import Security from './views/Settings/Security';
import SetPassword from './views/Settings/SetPassword';
import SetDuressPassword from './views/Settings/SetDuressPassword';
import SetPin from './views/Settings/SetPin';
import SetDuressPin from './views/Settings/SetDuressPin';
import Language from './views/Settings/Language';
import Currency from './views/Settings/Currency';
import SelectCurrency from './views/Settings/SelectCurrency';
import Display from './views/Settings/Display';
import CertInstallInstructions from './views/Settings/CertInstallInstructions';
import Support from './views/Settings/Support';
import Help from './views/Settings/Help';
import SocialMedia from './views/Settings/SocialMedia';
import Sponsors from './views/Settings/Sponsors';
import Olympians from './views/Settings/Olympians';
import Gods from './views/Settings/Gods';
import Mortals from './views/Settings/Mortals';
import PointOfSale from './views/Settings/PointOfSale';
import PointOfSaleRecon from './views/Settings/PointOfSaleRecon';
import PointOfSaleReconExport from './views/Settings/PointOfSaleReconExport';
import Categories from './views/POS/Categories';
import ProductCategoryDetails from './views/POS/ProductCategoryDetails';
import Products from './views/POS/Products';
import ProductDetails from './views/POS/ProductDetails';
import PaymentsSettings from './views/Settings/PaymentsSettings';
import InvoicesSettings from './views/Settings/InvoicesSettings';
import LSP from './views/Settings/LSP';
import ChannelsSettings from './views/Settings/ChannelsSettings';
import SetWalletPicture from './views/Settings/SetWalletPicture';
import ChoosePaymentMethod from './views/ChoosePaymentMethod';
import NWCConnectionsList from './views/Settings/NostrWalletConnect/NWCConnectionsList';
import AddOrEditNWCConnection from './views/Settings/NostrWalletConnect/AddOrEditNWCConnection';
import NWCConnectionDetails from './views/Settings/NostrWalletConnect/NWCConnectionDetails';
import NWCConnectionQR from './views/Settings/NostrWalletConnect/NWCConnectionQR';
import NWCSettings from './views/Settings/NostrWalletConnect/NWCSettings';
import NWCConnectionActivity from './views/Settings/NostrWalletConnect/NWCConnectionActivity';
import NWCConnectionActivityFilter from './views/Settings/NostrWalletConnect/NWCConnectionActivityFilter';
// Lightning address
import LightningAddress from './views/LightningAddress';
import CreateZaplockerLightningAddress from './views/LightningAddress/CreateZaplockerLightningAddress';
import CreateNWCLightningAddress from './views/LightningAddress/CreateNWCLightningAddress';
import ZaplockerGetChan from './views/LightningAddress/ZaplockerGetChan';
import ZaplockerInfo from './views/LightningAddress/ZaplockerInfo';
import NWCAddressInfo from './views/LightningAddress/NWCAddressInfo';
import LightningAddressSettings from './views/LightningAddress/LightningAddressSettings';
import LightningAddressQR from './views/LightningAddress/LightningAddressQR';
import NWCAddressSettings from './views/LightningAddress/NWCAddressSettings';
import Attestation from './views/LightningAddress/Attestation';
import Attestations from './views/LightningAddress/Attestations';
import NostrKeys from './views/LightningAddress/NostrKeys';
import NostrRelays from './views/LightningAddress/NostrRelays';
import ChangeAddress from './views/LightningAddress/ChangeAddress';
import EditProfile from './views/LightningAddress/EditProfile';
import ZeusPayPlus from './views/LightningAddress/ZeusPayPlus';
import ZeusPayPlusPerks from './views/LightningAddress/ZeusPayPlusPerks';
import WebPortalPOS from './views/LightningAddress/WebPortalPOS';

// BOLT 12
import PayCodes from './views/PayCodes';
import PayCode from './views/PayCode';
import CreatePayCode from './views/PayCodeCreate';
import Bolt12Address from './views/Settings/Bolt12Address';

// Embedded Node
import EmbeddedNode from './views/Settings/EmbeddedNode';
import DisasterRecovery from './views/Settings/EmbeddedNode/DisasterRecovery';
import DisasterRecoveryAdvanced from './views/Settings/EmbeddedNode/DisasterRecoveryAdvanced';
import Pathfinding from './views/Settings/EmbeddedNode/Pathfinding';
import ExpressGraphSync from './views/Settings/EmbeddedNode/ExpressGraphSync';
import RapidGossipSync from './views/Settings/EmbeddedNode/RapidGossipSync';
import EsploraServer from './views/Settings/EmbeddedNode/EsploraServer';
import VssServer from './views/Settings/EmbeddedNode/VssServer';
import PathfindingScorer from './views/Settings/EmbeddedNode/PathfindingScorer';
import LNDLogs from './views/Settings/EmbeddedNode/LNDLogs';
import LDKLogs from './views/Settings/EmbeddedNode/LDKLogs';
import Peers from './views/Settings/EmbeddedNode/Peers';
import NeutrinoPeers from './views/Settings/EmbeddedNode/Peers/NeutrinoPeers';
import ZeroConfPeers from './views/Settings/EmbeddedNode/Peers/ZeroConfPeers';
import Advanced from './views/Settings/EmbeddedNode/Advanced';
import AdvancedRescan from './views/Settings/EmbeddedNode/AdvancedRescan';
import Troubleshooting from './views/Settings/EmbeddedNode/Troubleshooting';

// Routing
import Routing from './views/Routing/Routing';
import RoutingEvent from './views/Routing/RoutingEvent';
import SetFees from './views/Routing/SetFees';

// new views
import Activity from './views/Activity/Activity';
import ActivityFilter from './views/Activity/ActivityFilter';
import CoinControl from './views/UTXOs/CoinControl';
import Utxo from './views/UTXOs/UTXO';
import QR from './views/QR';
import AddNotes from './views/AddNotes';
import Contacts from './views/Settings/Contacts';
import AddContact from './views/Settings/AddContact';
import ContactDetails from './views/ContactDetails';

import PendingHTLCs from './views/PendingHTLCs';
import Swaps from './views/Swaps/index';
import SwapDetails from './views/Swaps/SwapDetails';
import SwapsPane from './views/Swaps/SwapsPane';
import RefundSwap from './views/Swaps/Refund';
import SwapSettings from './views/Swaps/Settings';

// POS
import Order from './views/Order';

import IntroSplash from './views/IntroSplash';

// Onboarding
import Onboarding1 from './views/Onboarding/Onboarding1';
import RecommendedSettings from './views/Onboarding/RecommendedSettings';
import WalletSetup from './views/Onboarding/WalletSetup';
import WalletType from './views/Onboarding/WalletType';
import NodeChoice from './views/Onboarding/NodeChoice';
import MintDiscovery from './views/Onboarding/MintDiscovery';
import WalletSettings from './views/Onboarding/WalletSettings';

import EditFee from './views/EditFee';

// Embedded LND/LDK
import Seed from './views/Settings/Seed';
import SeedRecovery from './views/Settings/SeedRecovery';
import LdkWalletRecoverySettings from './views/Settings/LdkRecovery/LdkWalletRecoverySettings';
import LdkRecoveryVssServer from './views/Settings/LdkRecovery/LdkRecoveryVssServer';
import SeedQRExport from './views/Settings/SeedQRExport';
import Sync from './views/Sync';
import SyncRecovery from './views/SyncRecovery';
import LspExplanationFees from './views/Explanations/LspExplanationFees';
import LspExplanationRouting from './views/Explanations/LspExplanationRouting';
import LspExplanationWrappedInvoices from './views/Explanations/LspExplanationWrappedInvoices';
import LspExplanationOverview from './views/Explanations/LspExplanationOverview';
import RestoreChannelBackups from './views/Settings/EmbeddedNode/RestoreChannelBackups';

// LSP
import LSPServicesList from './views/Settings/LSPServicesList';

// LSPS1
import LSPS1 from './views/LSPS1/index';
import LSPS1Settings from './views/LSPS1/Settings';
import OrdersPane from './views/LSPS1/OrdersPane';
import LSPS1Order from './views/LSPS1/Order';
import LSPPaymentAwait from './views/LSPS/LSPPaymentAwait';
// LSPS7
import LSPS7 from './views/LSPS7/index';
import LSPS7Order from './views/LSPS7/Order';

// Cashu Ecash
import EcashSettings from './views/Settings/EcashSettings';
import ReceiveEcash from './views/Cashu/ReceiveEcash';
import CashuInvoice from './views/Cashu/CashuInvoice';
import CashuPayment from './views/Cashu/CashuPayment';
import CashuPaymentRequest from './views/Cashu/CashuPaymentRequest';
import CashuSendingLightning from './views/Cashu/CashuSendingLightning';
import MultimintPayment from './views/Cashu/MultimintPayment';
import Mint from './views/Cashu/Mint';
import Mints from './views/Cashu/Mints';
import AddMint from './views/Cashu/AddMint';
import CashuToken from './views/Cashu/CashuToken';
import SendEcash from './views/Cashu/SendEcash';
import UnspentTokens from './views/Cashu/UnspentTokens';
import CashuSeed from './views/Cashu/CashuSeed';
import CashuLockSettings from './views/Cashu/CashuLockSettings';
import LegacySeedRecovery from './views/Cashu/LegacySeedRecovery';
import RecoverMintQuote from './views/Cashu/RecoverMintQuote';

// Cashu Lightning address
import CreateCashuLightningAddress from './views/Cashu/LightningAddress/CreateCashuLightningAddress';
import CashuLightningAddressInfo from './views/Cashu/LightningAddress/LightningAddressInfo';
import CashuLightningAddressSettings from './views/Cashu/LightningAddress/LightningAddressSettings';

// Chantools
import Chantools from './views/Settings/EmbeddedNode/Chantools';
import Sweepremoteclosed from './views/Settings/EmbeddedNode/Chantools/Sweepremoteclosed';

import RawTxHex from './views/RawTxHex';
import AmountKeypad from './views/AmountKeypad';

import CustodialWalletWarning from './views/Settings/CustodialWalletWarning';

import PSBT from './views/PSBT';
import TxHex from './views/TxHex';

import Menu from './views/Menu';

// Tools
import Tools from './views/Tools';
import ActivityExport from './views/Tools/ActivityExport';
import BumpFee from './views/Tools/BumpFee';
import CurrencyConverter from './views/Tools/CurrencyConverter';
import DeveloperTools from './views/Tools/DeveloperTools';
import Rebalance from './views/Tools/Rebalance';
import RebalancingChannels from './views/Tools/RebalancingChannels';
import SignVerifyMessage from './views/Tools/SignVerifyMessage';
import Sweep from './views/Tools/Sweep';
import Accounts from './views/Tools/Accounts/Accounts';
import ImportAccount from './views/Tools/Accounts/ImportAccount';
import ImportingAccount from './views/Tools/Accounts/ImportingAccount';
import CashuTools from './views/Tools/CashuTools';
import NostrKeysTools from './views/Tools/NostrKeys';
import NostrMintSync from './views/Tools/NostrKeys/NostrMintSync';
import NodeConfigExportImport from './views/Tools/NodeConfigExportImport';
import Watchtowers from './views/Tools/Watchtowers/WatchtowerList';
import AddWatchtower from './views/Tools/Watchtowers/AddWatchtower';
import WatchtowerDetails from './views/Tools/Watchtowers/WatchtowerDetails';
import ShareIntentProcessing from './views/ShareIntentProcessing';
import WIFSweeper from './views/Tools/WIFSweeper';

import { isLightTheme, themeColor } from './utils/ThemeUtils';
import LinkingUtils from './utils/LinkingUtils';
import CreateWithdrawalRequest from './views/Tools/CreateWithdrawalRequest';
import WithdrawalRequestInfo from './views/WithdrawalRequestInfo';
import RedeemWithdrawalRequest from './views/RedeemWithdrawalRequest';

const Stack = createNativeStackNavigator();

export default class App extends React.PureComponent {
    private backPressListenerSubscription: NativeEventSubscription;
    private appStateSubscription: NativeEventSubscription;
    private navigation: any = null;

    private static SCREENS_WITH_CUSTOM_BACK_HANDLER = [
        'SendingLightning',
        'SendingOnChain',
        'CashuSendingLightning',
        'IntroSplash',
        'NostrContacts'
    ];

    private handleBackPress = (navigation: any) => {
        const dialogHasBeenClosed = modalStore.closeVisibleModalDialog();
        if (dialogHasBeenClosed) {
            return true;
        }

        if (settingsStore.loginRequired()) {
            BackHandler.exitApp();
            return true;
        }

        const navigationState = navigation.getState();
        const currentRoute =
            navigationState.routes[navigationState.routes.length - 1];

        if (App.SCREENS_WITH_CUSTOM_BACK_HANDLER.includes(currentRoute?.name)) {
            return false;
        }

        if (navigationState.routes.length > 1) {
            navigation.pop();
            return true;
        }

        return false;
    };

    componentDidMount() {
        this.appStateSubscription = AppState.addEventListener(
            'change',
            this.handleAppStateChange
        );

        // Ensure stealth mode is in a valid state (safety check)
        StealthModeUtils.fixStealthModeIfNeeded();
    }

    componentWillUnmount() {
        if (this.appStateSubscription) {
            this.appStateSubscription.remove();
        }
    }

    handleAppStateChange = async (nextAppState: string) => {
        if (nextAppState === 'active' && this.navigation) {
            LinkingUtils.resetShareIntentFlag();

            if (Platform.OS === 'android') {
                setTimeout(() => {
                    LinkingUtils.handleAndroidIntents(this.navigation);
                }, 100);
            }
        }

        // Sync stealth mode when app goes to background
        if (nextAppState === 'background') {
            try {
                const settings = await settingsStore.getSettings();
                if (settings?.privacy?.stealthMode) {
                    const stealthApp =
                        settings.privacy.stealthApp || 'calculator';
                    await StealthModeUtils.enableStealthMode(stealthApp);
                } else {
                    // If stealth was toggled off but native state wasn't
                    // synced (e.g. user pressed Home instead of Back),
                    // disable it now
                    const nativeActive =
                        await StealthModeUtils.isStealthModeActive();
                    if (nativeActive) {
                        await StealthModeUtils.disableStealthMode();
                    }
                }
            } catch (error) {
                console.error(
                    'Error applying stealth mode on background:',
                    error
                );
            }
        }
    };

    render() {
        return (
            <Provider
                ActivityStore={activityStore}
                AlertStore={alertStore}
                BalanceStore={balanceStore}
                CashuStore={cashuStore}
                ChannelBackupStore={channelBackupStore}
                ChannelsStore={channelsStore}
                ConnectivityStore={connectivityStore}
                ContactStore={contactStore}
                FeeStore={feeStore}
                FiatStore={fiatStore}
                InventoryStore={inventoryStore}
                InvoicesStore={invoicesStore}
                LightningAddressStore={lightningAddressStore}
                LnurlPayStore={lnurlPayStore}
                LSPStore={lspStore}
                MessageSignStore={messageSignStore}
                ModalStore={modalStore}
                NodeInfoStore={nodeInfoStore}
                NotesStore={notesStore}
                OffersStore={offersStore}
                PaymentsStore={paymentsStore}
                PosStore={posStore}
                SettingsStore={settingsStore}
                SwapStore={swapStore}
                SyncStore={syncStore}
                TransactionsStore={transactionsStore}
                UnitsStore={unitsStore}
                UTXOsStore={utxosStore}
                SweepStore={sweepStore}
                NostrWalletConnectStore={nostrWalletConnectStore}
            >
                <SafeAreaProvider initialMetrics={initialWindowMetrics}>
                    <AppContainer>
                        <PushNotificationManager>
                            <GestureHandlerRootView style={{ flex: 1 }}>
                                <StealthModeWrapper>
                                    <SafeAreaView
                                        style={{ flex: 1 }}
                                        edges={['left', 'right', 'bottom']}
                                    >
                                        <Observer>
                                            {() => (
                                                <>
                                                    <StatusBar
                                                        barStyle={
                                                            isLightTheme()
                                                                ? 'dark-content'
                                                                : 'light-content'
                                                        }
                                                    />
                                                    <NavigationContainer
                                                        ref={(nav) => {
                                                            if (nav != null) {
                                                                this.navigation =
                                                                    nav;

                                                                NavigationService.setTopLevelNavigator(
                                                                    // @ts-ignore:next-line
                                                                    nav
                                                                );
                                                            }
                                                        }}
                                                        // @ts-ignore:next-line

                                                        theme={{
                                                            ...DarkTheme,
                                                            colors: {
                                                                ...DarkTheme.colors,
                                                                background:
                                                                    themeColor(
                                                                        'background'
                                                                    ),
                                                                card: themeColor(
                                                                    'background'
                                                                ),
                                                                notification:
                                                                    themeColor(
                                                                        'text'
                                                                    ),
                                                                primary:
                                                                    themeColor(
                                                                        'highlight'
                                                                    ),
                                                                text: themeColor(
                                                                    'text'
                                                                )
                                                            }
                                                        }}
                                                    >
                                                        <Stack.Navigator
                                                            screenOptions={({
                                                                route
                                                            }) => ({
                                                                headerShown:
                                                                    false,
                                                                animationDuration:
                                                                    Platform.OS ===
                                                                    'android'
                                                                        ? 300
                                                                        : 350,
                                                                // Only override animation when explicitly provided - undefined breaks shared element transitions
                                                                ...((
                                                                    route.params as any
                                                                )?.animation !=
                                                                    null && {
                                                                    animation: (
                                                                        route.params as any
                                                                    ).animation
                                                                })
                                                            })}
                                                            screenListeners={({
                                                                navigation
                                                            }) => ({
                                                                focus: () => {
                                                                    this.backPressListenerSubscription?.remove();
                                                                    this.backPressListenerSubscription =
                                                                        BackHandler.addEventListener(
                                                                            'hardwareBackPress',
                                                                            () =>
                                                                                this.handleBackPress(
                                                                                    navigation
                                                                                )
                                                                        );
                                                                },
                                                                blur: () =>
                                                                    this.backPressListenerSubscription?.remove()
                                                            })}
                                                        >
                                                            <Stack.Screen
                                                                name="Wallet" // @ts-ignore:next-line
                                                                component={
                                                                    Wallet
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="IntroSplash" // @ts-ignore:next-line
                                                                component={
                                                                    IntroSplash
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Onboarding1" // @ts-ignore:next-line
                                                                component={
                                                                    Onboarding1
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RecommendedSettings" // @ts-ignore:next-line
                                                                component={
                                                                    RecommendedSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WalletSetup" // @ts-ignore:next-line
                                                                component={
                                                                    WalletSetup
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WalletType" // @ts-ignore:next-line
                                                                component={
                                                                    WalletType
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NodeChoice" // @ts-ignore:next-line
                                                                component={
                                                                    NodeChoice
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="MintDiscovery" // @ts-ignore:next-line
                                                                component={
                                                                    MintDiscovery
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WalletSettings" // @ts-ignore:next-line
                                                                component={
                                                                    WalletSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Lockscreen" // @ts-ignore:next-line
                                                                component={
                                                                    Lockscreen
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Accounts" // @ts-ignore:next-line
                                                                component={
                                                                    Accounts
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ChoosePaymentMethod" // @ts-ignore:next-line
                                                                component={
                                                                    ChoosePaymentMethod
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ShareIntentProcessing" // @ts-ignore:next-line
                                                                component={
                                                                    ShareIntentProcessing
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Send" // @ts-ignore:next-line
                                                                component={Send}
                                                            />
                                                            <Stack.Screen
                                                                name="Sweep" // @ts-ignore:next-line
                                                                component={
                                                                    Sweep
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EditFee" // @ts-ignore:next-line
                                                                component={
                                                                    EditFee
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Menu" // @ts-ignore:next-line
                                                                component={Menu}
                                                            />
                                                            <Stack.Screen
                                                                name="Settings" // @ts-ignore:next-line
                                                                component={
                                                                    Settings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Tools" // @ts-ignore:next-line
                                                                component={
                                                                    Tools
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WalletConfiguration" // @ts-ignore:next-line
                                                                component={
                                                                    WalletConfiguration
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Wallets" // @ts-ignore:next-line
                                                                component={
                                                                    Wallets
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Networking" // @ts-ignore:next-line
                                                                component={
                                                                    Networking
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Privacy" // @ts-ignore:next-line
                                                                component={
                                                                    Privacy
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="StealthMode" // @ts-ignore:next-line
                                                                component={
                                                                    StealthMode
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Security" // @ts-ignore:next-line
                                                                component={
                                                                    Security
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SetPassword" // @ts-ignore:next-line
                                                                component={
                                                                    SetPassword
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SetDuressPassword" // @ts-ignore:next-line
                                                                component={
                                                                    SetDuressPassword
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SetPin" // @ts-ignore:next-line
                                                                component={
                                                                    SetPin
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SetDuressPin" // @ts-ignore:next-line
                                                                component={
                                                                    SetDuressPin
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Language" // @ts-ignore:next-line
                                                                component={
                                                                    Language
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Currency" // @ts-ignore:next-line
                                                                component={
                                                                    Currency
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SelectCurrency" // @ts-ignore:next-line
                                                                component={
                                                                    SelectCurrency
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Display" // @ts-ignore:next-line
                                                                component={
                                                                    Display
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Support" // @ts-ignore:next-line
                                                                component={
                                                                    Support
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Help" // @ts-ignore:next-line
                                                                component={Help}
                                                            />
                                                            <Stack.Screen
                                                                name="Sponsors" // @ts-ignore:next-line
                                                                component={
                                                                    Sponsors
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Olympians" // @ts-ignore:next-line
                                                                component={
                                                                    Olympians
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Gods" // @ts-ignore:next-line
                                                                component={Gods}
                                                            />
                                                            <Stack.Screen
                                                                name="Mortals" // @ts-ignore:next-line
                                                                component={
                                                                    Mortals
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CertInstallInstructions" // @ts-ignore:next-line
                                                                component={
                                                                    CertInstallInstructions
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SignVerifyMessage" // @ts-ignore:next-line
                                                                component={
                                                                    SignVerifyMessage
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Transaction" // @ts-ignore:next-line
                                                                component={
                                                                    Transaction
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Channel" // @ts-ignore:next-line
                                                                component={
                                                                    Channel
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Payment" // @ts-ignore:next-line
                                                                component={
                                                                    Payment
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PaymentPaths" // @ts-ignore:next-line
                                                                component={
                                                                    PaymentPaths
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Invoice" // @ts-ignore:next-line
                                                                component={
                                                                    Invoice
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LnurlPay" // @ts-ignore:next-line
                                                                component={
                                                                    LnurlPay
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ClinkPay" // @ts-ignore:next-line
                                                                component={
                                                                    ClinkPay
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Receive" // @ts-ignore:next-line
                                                                component={
                                                                    Receive
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LnurlChannel" // @ts-ignore:next-line
                                                                component={
                                                                    LnurlChannel
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LnurlAuth" // @ts-ignore:next-line
                                                                component={
                                                                    LnurlAuth
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PaymentRequest" // @ts-ignore:next-line
                                                                component={
                                                                    PaymentRequest
                                                                }
                                                                options={{
                                                                    gestureEnabled:
                                                                        false // disables swipe back
                                                                }}
                                                            />
                                                            <Stack.Screen
                                                                name="OpenChannel" // @ts-ignore:next-line
                                                                component={
                                                                    OpenChannel
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="VerifyOnChain" // @ts-ignore:next-line
                                                                component={
                                                                    VerifyOnChain
                                                                }
                                                                options={{
                                                                    gestureEnabled:
                                                                        false // disables swipe back
                                                                }}
                                                            />
                                                            <Stack.Screen
                                                                name="SendingOnChain" // @ts-ignore:next-line
                                                                component={
                                                                    SendingOnChain
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SendingLightning" // @ts-ignore:next-line
                                                                component={
                                                                    SendingLightning
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NodeInfo" // @ts-ignore:next-line
                                                                component={
                                                                    NodeInfo
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Routing" // @ts-ignore:next-line
                                                                component={
                                                                    Routing
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RoutingEvent" // @ts-ignore:next-line
                                                                component={
                                                                    RoutingEvent
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SetFees" // @ts-ignore:next-line
                                                                component={
                                                                    SetFees
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Rebalance" // @ts-ignore:next-line
                                                                component={
                                                                    Rebalance
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RebalancingChannels"
                                                                // @ts-ignore:next-line
                                                                component={
                                                                    RebalancingChannels
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Activity" // @ts-ignore:next-line
                                                                component={
                                                                    Activity
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ActivityFilter" // @ts-ignore:next-line
                                                                component={
                                                                    ActivityFilter
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CoinControl" // @ts-ignore:next-line
                                                                component={
                                                                    CoinControl
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Utxo" // @ts-ignore:next-line
                                                                component={Utxo}
                                                            />
                                                            <Stack.Screen
                                                                name="ImportAccount" // @ts-ignore:next-line
                                                                component={
                                                                    ImportAccount
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ImportingAccount" // @ts-ignore:next-line
                                                                component={
                                                                    ImportingAccount
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="HandleAnythingQRScanner" // @ts-ignore:next-line
                                                                component={
                                                                    HandleAnythingQRScanner
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SwapsQRScanner" // @ts-ignore:next-line
                                                                component={
                                                                    SwapsQRScanner
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RefundSwapQRScanner" // @ts-ignore:next-line
                                                                component={
                                                                    RefundSwapQRScanner
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NodeQRCodeScanner" // @ts-ignore:next-line
                                                                component={
                                                                    NodeQRScanner
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Order" // @ts-ignore:next-line
                                                                component={
                                                                    Order
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PointOfSaleSettings" // @ts-ignore:next-line
                                                                component={
                                                                    PointOfSale
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PointOfSaleRecon" // @ts-ignore:next-line
                                                                component={
                                                                    PointOfSaleRecon
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PointOfSaleReconExport" // @ts-ignore:next-line
                                                                component={
                                                                    PointOfSaleReconExport
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Categories" // @ts-ignore:next-line
                                                                component={
                                                                    Categories
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ProductCategoryDetails" // @ts-ignore:next-line
                                                                component={
                                                                    ProductCategoryDetails
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Products" // @ts-ignore:next-line
                                                                component={
                                                                    Products
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ProductDetails" // @ts-ignore:next-line
                                                                component={
                                                                    ProductDetails
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PaymentsSettings" // @ts-ignore:next-line
                                                                component={
                                                                    PaymentsSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="InvoicesSettings" // @ts-ignore:next-line
                                                                component={
                                                                    InvoicesSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NostrWalletConnect" // @ts-ignore:next-line
                                                                component={
                                                                    NWCConnectionsList
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="AddOrEditNWCConnection" // @ts-ignore:next-line
                                                                component={
                                                                    AddOrEditNWCConnection
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCConnectionDetails" // @ts-ignore:next-line
                                                                component={
                                                                    NWCConnectionDetails
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCConnectionQR" // @ts-ignore:next-line
                                                                component={
                                                                    NWCConnectionQR
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCConnectionActivity" // @ts-ignore:next-line
                                                                component={
                                                                    NWCConnectionActivity
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCConnectionActivityFilter" // @ts-ignore:next-line
                                                                component={
                                                                    NWCConnectionActivityFilter
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCSettings" // @ts-ignore:next-line
                                                                component={
                                                                    NWCSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Seed" // @ts-ignore:next-line
                                                                component={Seed}
                                                            />
                                                            <Stack.Screen
                                                                name="SeedRecovery" // @ts-ignore:next-line
                                                                component={
                                                                    SeedRecovery
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LdkWalletRecoverySettings" // @ts-ignore:next-line
                                                                component={
                                                                    LdkWalletRecoverySettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LdkRecoveryVssServer" // @ts-ignore:next-line
                                                                component={
                                                                    LdkRecoveryVssServer
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SeedQRExport" // @ts-ignore:next-line
                                                                component={
                                                                    SeedQRExport
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Sync" // @ts-ignore:next-line
                                                                component={Sync}
                                                            />
                                                            <Stack.Screen
                                                                name="SyncRecovery" // @ts-ignore:next-line
                                                                component={
                                                                    SyncRecovery
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="BumpFee" // @ts-ignore:next-line
                                                                component={
                                                                    BumpFee
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="QR" // @ts-ignore:next-line
                                                                component={QR}
                                                            />
                                                            <Stack.Screen
                                                                name="AmountKeypad" // @ts-ignore:next-line
                                                                component={
                                                                    AmountKeypad
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="AddNotes" // @ts-ignore:next-line
                                                                component={
                                                                    AddNotes
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LspExplanationFees" // @ts-ignore:next-line
                                                                component={
                                                                    LspExplanationFees
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LspExplanationRouting" // @ts-ignore:next-line
                                                                component={
                                                                    LspExplanationRouting
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LspExplanationWrappedInvoices" // @ts-ignore:next-line
                                                                component={
                                                                    LspExplanationWrappedInvoices
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LspExplanationOverview" // @ts-ignore:next-line
                                                                component={
                                                                    LspExplanationOverview
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EmbeddedNodeSettings" // @ts-ignore:next-line
                                                                component={
                                                                    EmbeddedNode
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="DisasterRecovery" // @ts-ignore:next-line
                                                                component={
                                                                    DisasterRecovery
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="DisasterRecoveryAdvanced" // @ts-ignore:next-line
                                                                component={
                                                                    DisasterRecoveryAdvanced
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Pathfinding" // @ts-ignore:next-line
                                                                component={
                                                                    Pathfinding
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ExpressGraphSync" // @ts-ignore:next-line
                                                                component={
                                                                    ExpressGraphSync
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RapidGossipSync" // @ts-ignore:next-line
                                                                component={
                                                                    RapidGossipSync
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EsploraServer" // @ts-ignore:next-line
                                                                component={
                                                                    EsploraServer
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="VssServer" // @ts-ignore:next-line
                                                                component={
                                                                    VssServer
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PathfindingScorer" // @ts-ignore:next-line
                                                                component={
                                                                    PathfindingScorer
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LNDLogs" // @ts-ignore:next-line
                                                                component={
                                                                    LNDLogs
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LDKLogs" // @ts-ignore:next-line
                                                                component={
                                                                    LDKLogs
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Peers" // @ts-ignore:next-line
                                                                component={
                                                                    Peers
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NeutrinoPeers" // @ts-ignore:next-line
                                                                component={
                                                                    NeutrinoPeers
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ZeroConfPeers" // @ts-ignore:next-line
                                                                component={
                                                                    ZeroConfPeers
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EmbeddedNodeSettingsAdvanced" // @ts-ignore:next-line
                                                                component={
                                                                    Advanced
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EmbeddedNodeTroubleshooting" // @ts-ignore:next-line
                                                                component={
                                                                    Troubleshooting
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="AdvancedRescan" // @ts-ignore:next-line
                                                                component={
                                                                    AdvancedRescan
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPSettings" // @ts-ignore:next-line
                                                                component={LSP}
                                                            />
                                                            <Stack.Screen
                                                                name="ZaplockerGetChan" // @ts-ignore:next-line
                                                                component={
                                                                    ZaplockerGetChan
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LightningAddress" // @ts-ignore:next-line
                                                                component={
                                                                    LightningAddress
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LightningAddressQR" // @ts-ignore:next-line
                                                                component={
                                                                    LightningAddressQR
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ZaplockerInfo" // @ts-ignore:next-line
                                                                component={
                                                                    ZaplockerInfo
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LightningAddressSettings" // @ts-ignore:next-line
                                                                component={
                                                                    LightningAddressSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CreateZaplockerLightningAddress" // @ts-ignore:next-line
                                                                component={
                                                                    CreateZaplockerLightningAddress
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CreateCashuLightningAddress" // @ts-ignore:next-line
                                                                component={
                                                                    CreateCashuLightningAddress
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuLightningAddressInfo" // @ts-ignore:next-line
                                                                component={
                                                                    CashuLightningAddressInfo
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuLightningAddressSettings" // @ts-ignore:next-line
                                                                component={
                                                                    CashuLightningAddressSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Attestations" // @ts-ignore:next-line
                                                                component={
                                                                    Attestations
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Attestation" // @ts-ignore:next-line
                                                                component={
                                                                    Attestation
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Contacts" // @ts-ignore:next-line
                                                                component={
                                                                    Contacts
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="AddContact" // @ts-ignore:next-line
                                                                component={
                                                                    AddContact
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ContactDetails" // @ts-ignore:next-line
                                                                component={
                                                                    ContactDetails
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NostrKeys" // @ts-ignore:next-line
                                                                component={
                                                                    NostrKeys
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NostrRelays" // @ts-ignore:next-line
                                                                component={
                                                                    NostrRelays
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ChangeAddress" // @ts-ignore:next-line
                                                                component={
                                                                    ChangeAddress
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EditProfile" // @ts-ignore:next-line
                                                                component={
                                                                    EditProfile
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PayCodes" // @ts-ignore:next-line
                                                                component={
                                                                    PayCodes
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PayCode" // @ts-ignore:next-line
                                                                component={
                                                                    PayCode
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CreatePayCode" // @ts-ignore:next-line
                                                                component={
                                                                    CreatePayCode
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Bolt12Address" // @ts-ignore:next-line
                                                                component={
                                                                    Bolt12Address
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SocialMedia" // @ts-ignore:next-line
                                                                component={
                                                                    SocialMedia
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NostrContacts" // @ts-ignore:next-line
                                                                component={
                                                                    NostrContacts
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="MultiQR" // @ts-ignore:next-line
                                                                component={
                                                                    MultiQR
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CurrencyConverter" // @ts-ignore:next-line
                                                                component={
                                                                    CurrencyConverter
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ChannelsSettings" // @ts-ignore:next-line
                                                                component={
                                                                    ChannelsSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RawTxHex" // @ts-ignore:next-line
                                                                component={
                                                                    RawTxHex
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RestoreChannelBackups" // @ts-ignore:next-line
                                                                component={
                                                                    RestoreChannelBackups
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SetWalletPicture" // @ts-ignore:next-line
                                                                component={
                                                                    SetWalletPicture
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CustodialWalletWarning" // @ts-ignore:next-line
                                                                component={
                                                                    CustodialWalletWarning
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PSBT" // @ts-ignore:next-line
                                                                component={PSBT}
                                                            />
                                                            <Stack.Screen
                                                                name="TxHex" // @ts-ignore:next-line
                                                                component={
                                                                    TxHex
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPServicesList" // @ts-ignore:next-line
                                                                component={
                                                                    LSPServicesList
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS1" // @ts-ignore:next-line
                                                                component={
                                                                    LSPS1
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS1Settings" // @ts-ignore:next-line
                                                                component={
                                                                    LSPS1Settings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="OrdersPane" // @ts-ignore:next-line
                                                                component={
                                                                    OrdersPane
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS1Order" // @ts-ignore:next-line
                                                                component={
                                                                    LSPS1Order
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS1PaymentAwait" // @ts-ignore:next-line
                                                                component={
                                                                    LSPPaymentAwait
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS7" // @ts-ignore:next-line
                                                                component={
                                                                    LSPS7
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS7Order" // @ts-ignore:next-line
                                                                component={
                                                                    LSPS7Order
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LSPS7PaymentAwait" // @ts-ignore:next-line
                                                                component={
                                                                    LSPPaymentAwait
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="PendingHTLCs" // @ts-ignore:next-line
                                                                component={
                                                                    PendingHTLCs
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="OnChainAddresses" // @ts-ignore:next-line
                                                                component={
                                                                    OnChainAddresses
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="DeveloperTools" // @ts-ignore:next-line
                                                                component={
                                                                    DeveloperTools
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Watchtowers" // @ts-ignore:next-line
                                                                component={
                                                                    Watchtowers
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WatchtowerDetails" // @ts-ignore:next-line
                                                                component={
                                                                    WatchtowerDetails
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="AddWatchtower" // @ts-ignore:next-line
                                                                component={
                                                                    AddWatchtower
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Chantools" // @ts-ignore:next-line
                                                                component={
                                                                    Chantools
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Sweepremoteclosed" // @ts-ignore:next-line
                                                                component={
                                                                    Sweepremoteclosed
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ActivityExport" // @ts-ignore:next-line
                                                                component={
                                                                    ActivityExport
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="EcashSettings" // @ts-ignore:next-line
                                                                component={
                                                                    EcashSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ReceiveEcash" // @ts-ignore:next-line
                                                                component={
                                                                    ReceiveEcash
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuInvoice" // @ts-ignore:next-line
                                                                component={
                                                                    CashuInvoice
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuPayment" // @ts-ignore:next-line
                                                                component={
                                                                    CashuPayment
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuToken" // @ts-ignore:next-line
                                                                component={
                                                                    CashuToken
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SendEcash" // @ts-ignore:next-line
                                                                component={
                                                                    SendEcash
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuLockSettings" // @ts-ignore:next-line
                                                                component={
                                                                    CashuLockSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="UnspentTokens" // @ts-ignore:next-line
                                                                component={
                                                                    UnspentTokens
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuSeed" // @ts-ignore:next-line
                                                                component={
                                                                    CashuSeed
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="LegacySeedRecovery" // @ts-ignore:next-line
                                                                component={
                                                                    LegacySeedRecovery
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RecoverMintQuote" // @ts-ignore:next-line
                                                                component={
                                                                    RecoverMintQuote
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuPaymentRequest" // @ts-ignore:next-line
                                                                component={
                                                                    CashuPaymentRequest
                                                                }
                                                                options={{
                                                                    gestureEnabled:
                                                                        false // disables swipe back
                                                                }}
                                                            />
                                                            <Stack.Screen
                                                                name="CashuSendingLightning" // @ts-ignore:next-line
                                                                component={
                                                                    CashuSendingLightning
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="MultimintPayment" // @ts-ignore:next-line
                                                                component={
                                                                    MultimintPayment
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Mint" // @ts-ignore:next-line
                                                                component={Mint}
                                                            />
                                                            <Stack.Screen
                                                                name="Mints" // @ts-ignore:next-line
                                                                component={
                                                                    Mints
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="AddMint" // @ts-ignore:next-line
                                                                component={
                                                                    AddMint
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CashuTools" // @ts-ignore:next-line
                                                                component={
                                                                    CashuTools
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NostrKeysTools" // @ts-ignore:next-line
                                                                component={
                                                                    NostrKeysTools
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NostrMintSync" // @ts-ignore:next-line
                                                                component={
                                                                    NostrMintSync
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ZeusPayPlus" // @ts-ignore:next-line
                                                                component={
                                                                    ZeusPayPlus
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ZeusPayPlusPerks" // @ts-ignore:next-line
                                                                component={
                                                                    ZeusPayPlusPerks
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WebPortalPOS" // @ts-ignore:next-line
                                                                component={
                                                                    WebPortalPOS
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CreateNWCLightningAddress" // @ts-ignore:next-line
                                                                component={
                                                                    CreateNWCLightningAddress
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCAddressInfo" // @ts-ignore:next-line
                                                                component={
                                                                    NWCAddressInfo
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NWCAddressSettings" // @ts-ignore:next-line
                                                                component={
                                                                    NWCAddressSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="Swaps" // @ts-ignore:next-line
                                                                component={
                                                                    Swaps
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SwapDetails" // @ts-ignore:next-line
                                                                component={
                                                                    SwapDetails
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SwapsPane" // @ts-ignore:next-line
                                                                component={
                                                                    SwapsPane
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RefundSwap" // @ts-ignore:next-line
                                                                component={
                                                                    RefundSwap
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="SwapSettings" // @ts-ignore:next-line
                                                                component={
                                                                    SwapSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="NodeConfigExportImport" // @ts-ignore:next-line
                                                                component={
                                                                    NodeConfigExportImport
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="CreateWithdrawalRequest" // @ts-ignore:next-line
                                                                component={
                                                                    CreateWithdrawalRequest
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WithdrawalRequestInfo" // @ts-ignore:next-line
                                                                component={
                                                                    WithdrawalRequestInfo
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="RedeemWithdrawalRequest" // @ts-ignore:next-line
                                                                component={
                                                                    RedeemWithdrawalRequest
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="DonateToZEUS" // @ts-ignore:next-line
                                                                component={
                                                                    DonateToZEUS
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="ChangeDonationSettings" // @ts-ignore:next-line
                                                                component={
                                                                    ChangeDonationSettings
                                                                }
                                                            />
                                                            <Stack.Screen
                                                                name="WIFSweeper" // @ts-ignore:next-line
                                                                component={
                                                                    WIFSweeper
                                                                }
                                                            />
                                                        </Stack.Navigator>
                                                    </NavigationContainer>
                                                </>
                                            )}
                                        </Observer>
                                    </SafeAreaView>
                                </StealthModeWrapper>
                                {/* @ts-ignore:next-line */}
                                <AlertModal />
                                {/* @ts-ignore:next-line */}
                                <ExternalLinkModal />
                                {/* @ts-ignore:next-line */}
                                <AndroidNfcModal />
                                {/* @ts-ignore:next-line */}
                                <ShareModal />
                                {/* @ts-ignore:next-line */}
                                <NewChannelModal />
                                {/* @ts-ignore:next-line */}
                                <GraphSyncPromptModal />
                                {/* @ts-ignore:next-line */}
                                <InfoModal />
                                {/* @ts-ignore:next-line */}
                                <RatingModal />
                                {/* @ts-ignore:next-line */}
                                <RestoreChannelModal />
                                <CopiedToastHost />
                            </GestureHandlerRootView>
                        </PushNotificationManager>
                    </AppContainer>
                </SafeAreaProvider>
            </Provider>
        );
    }
}
