import { useState } from 'react' import { useRegistrationDraft } from '@/entities/registration' import { markCode, useCodeTimer } from '@/entities/verification-code' import { t } from '@/shared/i18n' import { useCountdown, useTask } from '@/shared/lib' import { createAccount, sendRegisterCode } from '../api/register' export function useRegisterVerify(onComplete: () => void) { const draft = useRegistrationDraft() const [code, setCode] = useState('') const task = useTask() const timer = useCodeTimer(`register:${draft?.email || ''}`) const retry = useCountdown(task.retryUntil) function submit() { if (!draft) return if (!/^\d{6}$/.test(code)) return task.fail({ code: t('registerVerify.codeError') }) void task.run(async (signal) => { await createAccount( { username: draft.username, email: draft.email, password_hash: draft.passwordHash, email_code: code, birth_date: `${draft.birth.year}-${draft.birth.month.padStart(2, '0')}-${draft.birth.day.padStart(2, '0')}`, }, signal, ) onComplete() }) } function resend() { if (!draft) return void task.run(async (signal) => { const response = await sendRegisterCode(draft.email, signal) markCode(`register:${draft.email}`, response.expires_in_secs) setCode('') task.setNotice({ kind: 'success', text: t('registerVerify.notice') }) }) } return { draft, code, setCode, task, timer, retry, submit, resend } } export type RegisterVerifyModel = ReturnType