import { useCallback, useMemo } from 'react'
import { InputGroup, Nav } from 'react-bootstrap'
import classNames from 'classnames'
import styles from '@/styles/wallet.module.css'
import navStyles from '@/styles/nav.module.css'
import { Checkbox, Form, Input, PasswordInput, SubmitButton } from '@/components/form'
import CancelButton from '@/components/cancel-button'
import Text from '@/components/text'
import Info from '@/components/info'
import { useFormState, useMaxSteps, useNext, useStepIndex } from '@/components/multi-step-form'
import { isTemplate, isWallet, protocolDisplayName, protocolFormId, protocolLogName, walletGuideUrl, walletLud16Domain } from '@/wallets/lib/util'
import { WalletLayout, WalletLayoutHeader, WalletLayoutImageOrName, WalletLogs } from '@/wallets/client/components'
import { TemplateLogsProvider, useTestSendPayment, useWalletLogger, useTestCreateInvoice, useWalletSupport } from '@/wallets/client/hooks'
import ArrowRight from '@/svgs/arrow-right-s-fill.svg'
import InfoIcon from '@/svgs/information-fill.svg'
import Link from 'next/link'
import { WalletMultiStepFormContextProvider, Step, useWallet, useWalletProtocols, useProtocol, useProtocolForm } from './hooks'
import { Settings } from './settings'
import { BackButton, SkipButton } from './button'
export function WalletMultiStepForm ({ wallet }) {
const initial = useMemo(() => wallet.protocols
.filter(p => !isTemplate(p))
.reduce((acc, p) => {
const formId = protocolFormId(p)
return {
...acc,
[formId]: p
}
}, {}), [wallet])
const support = useWalletSupport(wallet)
const steps = useMemo(() =>
[
support.send && Step.SEND,
support.receive && Step.RECEIVE,
Step.SETTINGS
].filter(Boolean),
[support])
const guideUrl = walletGuideUrl(wallet.name)
return (
{guideUrl && (
guide
)}
{steps.map(step => {
// WalletForm is aware of the current step via hooks
// and can thus render a different form for send vs. receive
if (step === Step.SEND) return
if (step === Step.RECEIVE) return
return
})}