import type { WalletInit, EIP1193Provider } from '@web3-onboard/common'

let bitgetWalletDependencies: any = null
let bitgetWalletAdapter: any = null

const loadBitgetWalletDependencies = async (getAdapter?: boolean) => {
  if (!bitgetWalletDependencies) {
    bitgetWalletDependencies = await import('@bitget-wallet/web3-sdk')
  }
  if (getAdapter && !bitgetWalletAdapter) {
    bitgetWalletAdapter = new bitgetWalletDependencies.LegacyEip1193Adapter()
    return bitgetWalletAdapter
  }
  if (getAdapter) {
    return bitgetWalletAdapter
  }
  return bitgetWalletDependencies
}

function bitgetWallet(): WalletInit {
  if (typeof window === 'undefined') return () => null

  return () => {
    return {
      label: 'Bitget Wallet',
      getIcon: async () => {
        const { WalletInfo } = await loadBitgetWalletDependencies()
        return WalletInfo.logolist.svg[256];
      },
      getInterface: async () => {
        const {
          currentProvider,
          getIsInstall,
          getDownload,
          installWalletMessage
        } = await loadBitgetWalletDependencies()

        let provider: EIP1193Provider
        if (getIsInstall()) {
          provider = currentProvider()
        } else {
          window.open(getDownload(), '_blank')
          throw new Error(installWalletMessage)
        }
        return { provider }
      }
    }
  }
}

export default bitgetWallet
