'use client'; import * as React from 'react'; import Link from 'next/link'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { apiClient, ApiError } from '@/lib/api/client'; import { forgotPasswordSchema, type ForgotPasswordFormValues } from '@/lib/validators/auth'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { FormField } from '@/components/ui/form-field'; type Area = 'tenant' | 'master'; export default function EsqueciSenhaPage() { const [area, setArea] = React.useState('tenant'); const [sent, setSent] = React.useState(false); const [error, setError] = React.useState(null); const { register, handleSubmit, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(forgotPasswordSchema) }); const onSubmit = async (values: ForgotPasswordFormValues) => { setError(null); try { // Resposta é sempre genérica (200), mesmo se o e-mail não existir — // o backend nunca revela isso (Etapa 13: nunca revelar se o e-mail existe). await apiClient.post('/auth/password/forgot', { email: values.email, usuario_tipo: area === 'master' ? 'master' : 'tenant_user', }); setSent(true); } catch (err) { setError( err instanceof ApiError ? err.message : 'Não foi possível conectar. Tente novamente.', ); } }; return (

Esqueci minha senha

Informe seu e-mail — se ele existir no sistema, enviaremos instruções de redefinição.

{sent ? (

Se o e-mail informado existir, as instruções de redefinição foram enviadas.

Voltar para o login
) : (
{error && (

{error}

)} Voltar para o login
)}
); }