import type { WalletInit } from '@web3-onboard/common'
import { createEIP1193Provider } from '@web3-onboard/common'
import { CustomWindow } from './types.js'
declare const window: CustomWindow

function XDEFIWallet(): WalletInit {
  if (typeof window === 'undefined') return () => null
  return () => {
    return {
      label: 'XDEFI Wallet',
      injectedNamespace: 'xfi',
      checkProviderIdentity: ({ provider }: { provider: any }) => {
        !!provider && !!provider['isXDEFI']
      },
      getIcon: async () => (await import('./icon.js')).default,
      getInterface: async () => {
       let provider
        if (window.xfi && window.xfi.ethereum) {
          provider = window.xfi.ethereum
        }
        if (!provider) {
          const newWindow = window.open(
            'https://install.xdefi.io/?utm_source=web3Onboard&utm_medium=organic&utm_campaign=xdefi.io&utm_id=xdefi.io',
            '_blank',
            'noopener noreferrer'
          )
          if (newWindow) newWindow.opener = null
          throw new Error('Please install XDEFI Wallet to use this wallet')
        } else {
          return { provider: createEIP1193Provider(window.xfi.ethereum) }
        }
      },
      platforms: ['desktop']
    }
  }
}

export default XDEFIWallet
