import { CHAIN_IDS } from '../../shared/constants/network';
import { KeyringType } from '../../shared/constants/keyring';

const createGetSmartTransactionFeesApiResponse = () => {
  return {
    tradeTxFees: {
      // Approval tx.
      cancelFees: [
        { maxFeePerGas: 2100001000, maxPriorityFeePerGas: 466503987 },
        { maxFeePerGas: 2310003200, maxPriorityFeePerGas: 513154852 },
        { maxFeePerGas: 2541005830, maxPriorityFeePerGas: 564470851 },
        { maxFeePerGas: 2795108954, maxPriorityFeePerGas: 620918500 },
        { maxFeePerGas: 3074622644, maxPriorityFeePerGas: 683010971 },
        { maxFeePerGas: 3382087983, maxPriorityFeePerGas: 751312751 },
        { maxFeePerGas: 3720300164, maxPriorityFeePerGas: 826444778 },
        { maxFeePerGas: 4092333900, maxPriorityFeePerGas: 909090082 },
        { maxFeePerGas: 4501571383, maxPriorityFeePerGas: 1000000000 },
        { maxFeePerGas: 4951733023, maxPriorityFeePerGas: 1100001000 },
        { maxFeePerGas: 5446911277, maxPriorityFeePerGas: 1210002200 },
        { maxFeePerGas: 5991607851, maxPriorityFeePerGas: 1331003630 },
        { maxFeePerGas: 6590774628, maxPriorityFeePerGas: 1464105324 },
        { maxFeePerGas: 7249858682, maxPriorityFeePerGas: 1610517320 },
        { maxFeePerGas: 7974851800, maxPriorityFeePerGas: 1771570663 },
        { maxFeePerGas: 8772344955, maxPriorityFeePerGas: 1948729500 },
        { maxFeePerGas: 9649588222, maxPriorityFeePerGas: 2143604399 },
        { maxFeePerGas: 10614556694, maxPriorityFeePerGas: 2357966983 },
        { maxFeePerGas: 11676022978, maxPriorityFeePerGas: 2593766039 },
      ],
      feeEstimate: 42000000000000,
      fees: [
        { maxFeePerGas: 2310003200, maxPriorityFeePerGas: 513154852 },
        { maxFeePerGas: 2541005830, maxPriorityFeePerGas: 564470850 },
        { maxFeePerGas: 2795108954, maxPriorityFeePerGas: 620918500 },
        { maxFeePerGas: 3074622644, maxPriorityFeePerGas: 683010970 },
        { maxFeePerGas: 3382087983, maxPriorityFeePerGas: 751312751 },
        { maxFeePerGas: 3720300163, maxPriorityFeePerGas: 826444777 },
        { maxFeePerGas: 4092333900, maxPriorityFeePerGas: 909090082 },
        { maxFeePerGas: 4501571382, maxPriorityFeePerGas: 999999999 },
        { maxFeePerGas: 4951733022, maxPriorityFeePerGas: 1100001000 },
        { maxFeePerGas: 5446911277, maxPriorityFeePerGas: 1210002200 },
        { maxFeePerGas: 5991607851, maxPriorityFeePerGas: 1331003630 },
        { maxFeePerGas: 6590774627, maxPriorityFeePerGas: 1464105324 },
        { maxFeePerGas: 7249858681, maxPriorityFeePerGas: 1610517320 },
        { maxFeePerGas: 7974851800, maxPriorityFeePerGas: 1771570662 },
        { maxFeePerGas: 8772344954, maxPriorityFeePerGas: 1948729500 },
        { maxFeePerGas: 9649588222, maxPriorityFeePerGas: 2143604398 },
        { maxFeePerGas: 10614556693, maxPriorityFeePerGas: 2357966982 },
        { maxFeePerGas: 11676022977, maxPriorityFeePerGas: 2593766039 },
        { maxFeePerGas: 12843636951, maxPriorityFeePerGas: 2853145236 },
      ],
      gasLimit: 21000,
      gasUsed: 21000,
    },
    approvalTxFees: {
      // Trade tx.
      cancelFees: [
        { maxFeePerGas: 2100001000, maxPriorityFeePerGas: 466503987 },
        { maxFeePerGas: 2310003200, maxPriorityFeePerGas: 513154852 },
        { maxFeePerGas: 2541005830, maxPriorityFeePerGas: 564470851 },
        { maxFeePerGas: 2795108954, maxPriorityFeePerGas: 620918500 },
        { maxFeePerGas: 3074622644, maxPriorityFeePerGas: 683010971 },
        { maxFeePerGas: 3382087983, maxPriorityFeePerGas: 751312751 },
        { maxFeePerGas: 3720300164, maxPriorityFeePerGas: 826444778 },
        { maxFeePerGas: 4092333900, maxPriorityFeePerGas: 909090082 },
        { maxFeePerGas: 4501571383, maxPriorityFeePerGas: 1000000000 },
        { maxFeePerGas: 4951733023, maxPriorityFeePerGas: 1100001000 },
        { maxFeePerGas: 5446911277, maxPriorityFeePerGas: 1210002200 },
        { maxFeePerGas: 5991607851, maxPriorityFeePerGas: 1331003630 },
        { maxFeePerGas: 6590774628, maxPriorityFeePerGas: 1464105324 },
        { maxFeePerGas: 7249858682, maxPriorityFeePerGas: 1610517320 },
        { maxFeePerGas: 7974851800, maxPriorityFeePerGas: 1771570663 },
        { maxFeePerGas: 8772344955, maxPriorityFeePerGas: 1948729500 },
        { maxFeePerGas: 9649588222, maxPriorityFeePerGas: 2143604399 },
        { maxFeePerGas: 10614556694, maxPriorityFeePerGas: 2357966983 },
        { maxFeePerGas: 11676022978, maxPriorityFeePerGas: 2593766039 },
      ],
      feeEstimate: 42000000000000,
      fees: [
        { maxFeePerGas: 2310003200, maxPriorityFeePerGas: 513154852 },
        { maxFeePerGas: 2541005830, maxPriorityFeePerGas: 564470850 },
        { maxFeePerGas: 2795108954, maxPriorityFeePerGas: 620918500 },
        { maxFeePerGas: 3074622644, maxPriorityFeePerGas: 683010970 },
        { maxFeePerGas: 3382087983, maxPriorityFeePerGas: 751312751 },
        { maxFeePerGas: 3720300163, maxPriorityFeePerGas: 826444777 },
        { maxFeePerGas: 4092333900, maxPriorityFeePerGas: 909090082 },
        { maxFeePerGas: 4501571382, maxPriorityFeePerGas: 999999999 },
        { maxFeePerGas: 4951733022, maxPriorityFeePerGas: 1100001000 },
        { maxFeePerGas: 5446911277, maxPriorityFeePerGas: 1210002200 },
        { maxFeePerGas: 5991607851, maxPriorityFeePerGas: 1331003630 },
        { maxFeePerGas: 6590774627, maxPriorityFeePerGas: 1464105324 },
        { maxFeePerGas: 7249858681, maxPriorityFeePerGas: 1610517320 },
        { maxFeePerGas: 7974851800, maxPriorityFeePerGas: 1771570662 },
        { maxFeePerGas: 8772344954, maxPriorityFeePerGas: 1948729500 },
        { maxFeePerGas: 9649588222, maxPriorityFeePerGas: 2143604398 },
        { maxFeePerGas: 10614556693, maxPriorityFeePerGas: 2357966982 },
        { maxFeePerGas: 11676022977, maxPriorityFeePerGas: 2593766039 },
        { maxFeePerGas: 12843636951, maxPriorityFeePerGas: 2853145236 },
      ],
      gasLimit: 21000,
      gasUsed: 21000,
    },
  };
};

export const createSwapsMockStore = () => {
  return {
    confirmTransaction: {
      txData: {},
    },
    swaps: {
      customGas: {
        limit: '0x0',
        fallBackPrice: 5,
        priceEstimates: {
          blockTime: 14.1,
          safeLow: 2.5,
          safeLowWait: 6.6,
          average: 4,
          avgWait: 5.3,
          fast: 5,
          fastWait: 3.3,
          fastest: 10,
          fastestWait: 0.5,
        },
      },
      fromToken: 'ETH',
      toToken: {
        symbol: 'USDC',
        address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
        occurances: 4,
      },
      swapsSTXLoading: false,
    },
    metamask: {
      networkDetails: {
        EIPS: {
          1559: false,
        },
      },
      providerConfig: {
        chainId: CHAIN_IDS.MAINNET,
      },
      cachedBalances: {
        [CHAIN_IDS.MAINNET]: 5,
      },
      preferences: {
        showFiatInTestnets: true,
      },
      currentCurrency: 'ETH',
      currentNetworkTxList: [
        {
          id: 6571648590592143,
          time: 1667403993369,
          status: 'confirmed',
          metamaskNetworkId: '5',
          originalGasEstimate: '0x7548',
          userEditedGasLimit: false,
          chainId: '0x5',
          loadingDefaults: false,
          dappSuggestedGasFees: null,
          sendFlowHistory: null,
          txParams: {
            from: '0x806627172af48bd5b0765d3449a7def80d6576ff',
            to: '0x881d40237659c251811cec9c364ef91dc08d300c',
            nonce: '0x30',
            value: '0x5af3107a4000',
            gas: '0x7548',
            maxFeePerGas: '0x19286f704d',
            maxPriorityFeePerGas: '0x77359400',
          },
          origin: 'metamask',
          actionId: 1667403993358.877,
          type: 'swap',
          userFeeLevel: 'medium',
          defaultGasEstimates: {
            estimateType: 'medium',
            gas: '0x7548',
            maxFeePerGas: '0x19286f704d',
            maxPriorityFeePerGas: '0x77359400',
          },
          sourceTokenSymbol: 'ETH',
          destinationTokenSymbol: 'USDC',
          destinationTokenDecimals: 6,
          destinationTokenAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',
          swapMetaData: {
            token_from: 'ETH',
            token_from_amount: '0.0001',
            token_to: 'USDC',
            token_to_amount: '0.15471500',
            slippage: 2,
            custom_slippage: false,
            best_quote_source: 'pmm',
            other_quote_selected: false,
            other_quote_selected_source: '',
            gas_fees: '3.016697',
            estimated_gas: '30024',
            used_gas_price: '0',
            is_hardware_wallet: false,
            stx_enabled: false,
            current_stx_enabled: false,
            stx_user_opt_in: false,
            reg_tx_fee_in_usd: 3.02,
            reg_tx_fee_in_eth: 0.00193,
            reg_tx_max_fee_in_usd: 5.06,
            reg_tx_max_fee_in_eth: 0.00324,
            max_fee_per_gas: '19286f704d',
            max_priority_fee_per_gas: '77359400',
            base_and_priority_fee_per_gas: 'efd93d95a',
          },
          swapTokenValue: '0.0001',
          estimatedBaseFee: 'e865e455a',
          hash: '0x8216e3696e7deb7ca794703015f17d5114a09362ae98f6a1611203e4c9509243',
          submittedTime: 1667403996143,
          firstRetryBlockNumber: '0x7838fe',
          baseFeePerGas: '0xe0ef7d207',
          blockTimestamp: '636290e8',
          postTxBalance: '19a61aaaf06e4bd1',
        },
      ],
      useCurrencyRateCheck: true,
      conversionRate: 1,
      contractExchangeRates: {
        '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48': 2,
        '0x1111111111111111111111111111111111111111': 0.1,
      },
      identities: {
        '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825': {
          address: '0xfdea65c8e26263f6d9a1b5de9555d2931a33b825',
          name: 'Send Account 1',
        },
        '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb': {
          address: '0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb',
          name: 'Send Account 2',
        },
        '0x2f8d4a878cfa04a6e60d46362f5644deab66572d': {
          address: '0x2f8d4a878cfa04a6e60d46362f5644deab66572d',
          name: 'Send Account 3',
        },
        '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
          address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
          name: 'Send Account 4',
        },
      },
      accounts: {
        '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
          address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
          balance: '0x0',
        },
        '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
          address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
          balance: '0x0',
        },
      },
      selectedAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
      currentLocale: 'en',
      keyringTypes: [KeyringType.imported, KeyringType.hdKeyTree],
      keyrings: [
        {
          type: KeyringType.hdKeyTree,
          accounts: [
            '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
            'c5b8dbac4c1d3f152cdeb400e2313f309c410acb',
            '2f8d4a878cfa04a6e60d46362f5644deab66572d',
          ],
        },
        {
          type: KeyringType.imported,
          accounts: ['0xd85a4b6a394794842887b8284293d69163007bbb'],
        },
      ],
      networkConfigurations: {},
      tokens: [
        {
          erc20: true,
          symbol: 'BAT',
          decimals: 18,
          address: '0x0D8775F648430679A709E98d2b0Cb6250d2887EF',
        },
        {
          erc20: true,
          symbol: 'USDT',
          decimals: 6,
          address: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
        },
      ],
      swapsState: {
        swapsFeatureFlags: {
          smartTransactions: {
            mobileActive: true,
            extensionActive: true,
          },
          swapRedesign: {
            mobileActive: true,
            extensionActive: true,
          },
        },
        quotes: {
          TEST_AGG_1: {
            trade: {
              from: '0xe18035bf8712672935fdb4e5e431b1a0183d2dfc',
              value: '0x0',
              gas: '0x61a80', // 4e5
              to: '0x881D40237659C251811CEC9c364ef91dC08D300C',
            },
            sourceAmount: '10000000000000000000', // 10e18
            destinationAmount: '20000000000000000000', // 20e18
            error: null,
            sourceToken: '0x6b175474e89094c44da98b954eedeac495271d0f',
            destinationToken: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
            approvalNeeded: null,
            maxGas: 600000,
            averageGas: 120000,
            estimatedRefund: 80000,
            fetchTime: 607,
            aggregator: 'TEST_AGG_1',
            aggType: 'AGG',
            slippage: 2,
            sourceTokenInfo: {
              address: '0x6b175474e89094c44da98b954eedeac495271d0f',
              symbol: 'DAI',
              decimals: 18,
              iconUrl: 'https://foo.bar/logo.png',
            },
            destinationTokenInfo: {
              address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
              symbol: 'USDC',
              decimals: 18,
            },
            fee: 1,
          },

          TEST_AGG_BEST: {
            trade: {
              from: '0xe18035bf8712672935fdb4e5e431b1a0183d2dfc',
              value: '0x0',
              gas: '0x61a80',
              to: '0x881D40237659C251811CEC9c364ef91dC08D300C',
            },
            sourceAmount: '10000000000000000000',
            destinationAmount: '25000000000000000000', // 25e18
            error: null,
            sourceToken: '0x6b175474e89094c44da98b954eedeac495271d0f',
            destinationToken: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
            approvalNeeded: null,
            maxGas: 1100000,
            averageGas: 411000,
            estimatedRefund: 343090,
            fetchTime: 1003,
            aggregator: 'TEST_AGG_BEST',
            aggType: 'AGG',
            slippage: 2,
            sourceTokenInfo: {
              address: '0x6b175474e89094c44da98b954eedeac495271d0f',
              symbol: 'DAI',
              decimals: 18,
              iconUrl: 'https://foo.bar/logo.png',
            },
            destinationTokenInfo: {
              address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
              symbol: 'USDC',
              decimals: 18,
            },
            fee: 1,
          },
          TEST_AGG_2: {
            trade: {
              from: '0xe18035bf8712672935fdb4e5e431b1a0183d2dfc',
              value: '0x0',
              gas: '0x61a80',
              to: '0x881D40237659C251811CEC9c364ef91dC08D300C',
            },
            sourceAmount: '10000000000000000000',
            destinationAmount: '22000000000000000000', // 22e18
            error: null,
            sourceToken: '0x6b175474e89094c44da98b954eedeac495271d0f',
            destinationToken: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
            approvalNeeded: null,
            maxGas: 368000,
            averageGas: 197000,
            estimatedRefund: 18205,
            fetchTime: 1354,
            aggregator: 'TEST_AGG_2',
            aggType: 'AGG',
            isBestQuote: true,
            slippage: 2,
            sourceTokenInfo: {
              address: '0x6b175474e89094c44da98b954eedeac495271d0f',
              symbol: 'DAI',
              decimals: 18,
              iconUrl: 'https://foo.bar/logo.png',
            },
            destinationTokenInfo: {
              address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
              symbol: 'USDC',
              decimals: 18,
            },
            fee: 1,
          },
        },
        fetchParams: {
          metaData: {
            sourceTokenInfo: {
              symbol: 'ETH',
            },
            destinationTokenInfo: {
              symbol: 'USDC',
            },
          },
        },
        tradeTxId: null,
        approveTxId: null,
        quotesLastFetched: 1519211809934,
        swapsQuoteRefreshTime: 60000,
        swapsQuotePrefetchingRefreshTime: 60000,
        swapsStxBatchStatusRefreshTime: 5000,
        swapsStxGetTransactionsRefreshTime: 5000,
        swapsStxMaxFeeMultiplier: 1.5,
        swapsStxStatusDeadline: 150000,
        customMaxGas: '',
        customGasPrice: null,
        selectedAggId: 'TEST_AGG_2',
        customApproveTxData: '',
        errorKey: '',
        topAggId: 'TEST_AGG_BEST',
        routeState: '',
        swapsFeatureIsLive: false,
      },
      useTokenDetection: true,
      tokenList: {
        '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984': {
          address: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
          symbol: 'UNI',
          decimals: 18,
          name: 'Uniswap',
          iconUrl: '',
          aggregators: [
            'airswapLight',
            'bancor',
            'cmc',
            'coinGecko',
            'kleros',
            'oneInch',
            'paraswap',
            'pmm',
            'totle',
            'zapper',
            'zerion',
            'zeroEx',
          ],
          occurrences: 12,
        },
        '0x514910771af9ca656af840dff83e8264ecf986ca': {
          address: '0x514910771af9ca656af840dff83e8264ecf986ca',
          symbol: 'LINK',
          decimals: 18,
          name: 'Chainlink',
          iconUrl: '',
          aggregators: [
            'airswapLight',
            'bancor',
            'cmc',
            'coinGecko',
            'kleros',
            'oneInch',
            'paraswap',
            'pmm',
            'totle',
            'zapper',
            'zerion',
            'zeroEx',
          ],
          occurrences: 12,
        },
        '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2': {
          address: '0x6b3595068778dd592e39a122f4f5a5cf09c90fe2',
          symbol: 'SUSHI',
          decimals: 18,
          name: 'SushiSwap',
          iconUrl: '',
          aggregators: [
            'bancor',
            'cmc',
            'coinGecko',
            'kleros',
            'oneInch',
            'paraswap',
            'pmm',
            'totle',
            'zapper',
            'zerion',
            'zeroEx',
          ],
          occurrences: 11,
        },
      },
      smartTransactionsState: {
        userOptIn: true,
        liveness: true,
        fees: createGetSmartTransactionFeesApiResponse(),
        smartTransactions: {
          [CHAIN_IDS.MAINNET]: [
            {
              uuid: 'uuid2',
              status: 'success',
              cancellable: false,
              statusMetadata: {
                cancellationFeeWei: 36777567771000,
                cancellationReason: 'not_cancelled',
                deadlineRatio: 0.6400288486480713,
                minedHash:
                  '0x55ad39634ee10d417b6e190cfd3736098957e958879cffe78f1f00f4fd2654d6',
                minedTx: 'success',
              },
            },
            {
              uuid: 'uuid2',
              status: 'pending',
              cancellable: true,
              statusMetadata: {
                cancellationFeeWei: 36777567771000,
                cancellationReason: 'not_cancelled',
                deadlineRatio: 0.6400288486480713,
                minedHash:
                  '0x55ad39634ee10d417b6e190cfd3736098957e958879cffe78f1f00f4fd2654d6',
                minedTx: 'success',
              },
            },
          ],
        },
      },
    },
    appState: {
      modal: {
        open: true,
        modalState: {
          name: 'test',
          props: {
            initialGasLimit: 100,
            minimumGasLimit: 5,
          },
        },
      },
      gasLoadingAnimationIsShowing: false,
    },
  };
};
