import React, { useState } from 'react'; import { Pressable, StyleSheet, View } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { Link, router } from 'expo-router'; import { useThemeColor } from '@/hooks/use-theme-color'; import { Button, Input } from '@/components/ui'; import { Text } from '@/components/ui/Text'; import { AuthScreen } from '@/components/auth/AuthScreen'; import { useAuth } from '@/context/AuthContext'; import { ApiError } from '@/lib/api'; import { useToast } from '@/context/ToastContext'; import { translateError, translateFields } from '@/lib/errors/translations'; export default function SignupScreen() { const [firstName, setFirstName] = useState(''); const [lastName, setLastName] = useState(''); const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [acceptedTerms, setAcceptedTerms] = useState(false); const [errors, setErrors] = useState<{ firstName?: string; email?: string; password?: string; confirmPassword?: string; acceptedTerms?: string; }>({}); const [loading, setLoading] = useState(false); const { signup } = useAuth(); const { showToast } = useToast(); const textColor = useThemeColor({}, 'text'); const tintColor = useThemeColor({}, 'tint'); const validateForm = () => { const newErrors: typeof errors = {}; if (!firstName.trim()) { newErrors.firstName = 'O nome é obrigatório'; } if (!email) { newErrors.email = 'Email é obrigatório'; } else if (!/\S+@\S+\.\S+/.test(email)) { newErrors.email = 'Por favor entre um email válido'; } if (!password) { newErrors.password = 'Senha é obrigatório'; } else if (password.length < 6) { newErrors.password = 'A senha deve conter pelo menos 6 caracteres'; } if (!confirmPassword) { newErrors.confirmPassword = 'Por favor confirme sua senha'; } else if (password !== confirmPassword) { newErrors.confirmPassword = 'As senhas não coincidem'; } if (!acceptedTerms) { newErrors.acceptedTerms = 'Você precisa aceitar os termos para continuar'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSignup = async () => { if (!validateForm()) return; setLoading(true); try { await signup({ firstName, lastName, email, password, acceptedTerms }); router.replace('/'); } catch (error) { if (error instanceof ApiError && error.fields) { setErrors(translateFields(error.fields)); } else { showToast(translateError(error) || 'Falha no cadastro. Tente novamente.', 'error'); } } finally { setLoading(false); } }; return ( Já tem uma conta?{' '} Faça login } > setAcceptedTerms((value) => !value)} hitSlop={8} accessibilityRole="checkbox" accessibilityState={{ checked: acceptedTerms }} testID="checkbox-terms" > Li e aceito os{' '} Termos e Condições {errors.acceptedTerms && ( {errors.acceptedTerms} )}