import { useState } from 'react' import { loginAccount, registerAccount, type AuthSession, } from '../profile' import { createOfflineCharacter, hasOfflineCharacter, resumeOfflineCharacter, selectOnlineMode, } from '../gameRepository' type Props = { onAuthenticated: (session: AuthSession) => void serverMessage?: string } export function AuthScreen({ onAuthenticated, serverMessage = '' }: Props) { const [mode, setMode] = useState<'login' | 'register'>('login') const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [characterName, setCharacterName] = useState('') const [offlineName, setOfflineName] = useState('') const [busy, setBusy] = useState(false) const [message, setMessage] = useState('') const offlineCharacterExists = hasOfflineCharacter() async function submit(event: React.FormEvent) { event.preventDefault() setBusy(true) setMessage('') try { selectOnlineMode() const session = mode === 'login' ? await loginAccount(username, password) : await registerAccount(username, password, characterName) onAuthenticated(session) } catch (reason) { setMessage(reason instanceof Error ? reason.message : 'Unable to authenticate.') } finally { setBusy(false) } } function beginOffline() { setMessage('') try { onAuthenticated(createOfflineCharacter(offlineName)) } catch (reason) { setMessage(reason instanceof Error ? reason.message : 'Unable to create an offline character.') } } function resumeOffline() { const session = resumeOfflineCharacter() if (session) onAuthenticated(session) } return (

Healer RPG

I want to Heal

Build your healer, master each dungeon, and compete for the most efficient clears.

{mode === 'register' && ( )}

{message || serverMessage || ( mode === 'register' ? 'The first account keeps the current local character and save.' : 'Sign in to continue your character.' )}

or

Local Save

Play Offline

No account or connection required. Offline progress stays on this device.

{offlineCharacterExists && ( )}
) }