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

let bitKeepDependencies: any = null
let bitKeepAdapter: any = null

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

/**
 * @deprecated Please use `@web3-onboard/bitget` instead.
 */
function bitKeep(): WalletInit {
  if (typeof window === 'undefined') return () => null

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

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

export default bitKeep
