import React, { useState, useCallback } from 'react' import { Block, Text, Toast, VideoBox } from '@share/components' import { Ionicons } from '@expo/vector-icons' import { Dimensions, TextInput, Platform } from 'react-native' import { useAuth } from '@/hooks/core/use-auth' import { setAuthToken } from '@/lib/auth' import { KeyboardAwareScrollView } from 'react-native-keyboard-controller' const BACKGROUND_VIDEOS = [ 'https://cdn.roasmax.cn/material/b46f380532e14cf58dd350dbacc7c34a.mp4', 'https://cdn.roasmax.cn/material/992e6c5d940c42feb71c27e556b754c0.mp4', 'https://cdn.roasmax.cn/material/e4947477843f4067be7c37569a33d17b.mp4', ] type AuthMode = 'login' | 'register' export default function Auth() { const { signIn, signUp } = useAuth() const [mode, setMode] = useState('login') const [bgVideo] = useState(() => BACKGROUND_VIDEOS[Math.floor(Math.random() * BACKGROUND_VIDEOS.length)]) const [username, setUsername] = useState('') const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [loading, setLoading] = useState(false) const handleLogin = useCallback(async () => { if (!username || !password) { Toast.show({ title: '请填写账号和密码' }) return } setLoading(true) try { const result = await signIn.username( { username, password, }, { onSuccess: async (ctx) => { const authToken = ctx.response.headers.get('set-auth-token') if (authToken) { setAuthToken(authToken) } }, onError: (ctx) => { console.error(`[LOGIN] login error`, ctx) }, }, ) if (result.error) { Toast.show({ title: result.error.message || '登录失败' }) } else { Toast.show({ title: '登录成功!' }) } } catch (error: any) { Toast.show({ title: error.message || '登录失败' }) } finally { setLoading(false) } }, [username, password, signIn]) const handleRegister = useCallback(async () => { if (!email || !username || !password) { Toast.show({ title: '请填写所有必填项' }) return } if (password !== confirmPassword) { Toast.show({ title: '两次密码输入不一致' }) return } if (password.length < 6) { Toast.show({ title: '密码长度至少6位' }) return } setLoading(true) try { const result = await signUp.email({ email, username, password, name: username, }) // console.log('result------------', result) if (result.error) { Toast.show({ title: result.error.message || '注册失败' }) } else { Toast.show({ title: '注册成功!' }) } } catch (error: any) { Toast.show({ title: error.message || '注册失败' }) } finally { setLoading(false) } }, [email, username, password, confirmPassword, signUp]) const handleSubmit = useCallback(() => { if (mode === 'login') { handleLogin() } else { handleRegister() } }, [mode, handleLogin, handleRegister]) return ( LOOMART {(['login', 'register'] as const).map((tabMode) => { const isActive = mode === tabMode return ( setMode(tabMode)} className={`flex-1 items-center justify-center border-[3px] border-black py-[12px] shadow-hard-black ${isActive ? 'bg-accent' : 'bg-white'}`} style={{ transform: [{ skewX: '-6deg' }] }} > {tabMode === 'login' ? '登录' : '注册'} ) })} {mode === 'login' ? ( 账号 ) : ( <> 邮箱 用户名 )} 密码 {mode === 'register' && ( 确认密码 )} {loading ? : } {loading ? '处理中...' : mode === 'login' ? '登录' : '注册'} {mode === 'login' && ( 忘记密码?点击找回 )} © 2025 LOOMART. All rights reserved. ) }