"use client" import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { getCurrentUser, AuthenticationError } from '@/lib/auth' import { AUTH_STORAGE_KEYS, USER_TYPE_ROUTES } from '@/types/auth' function parseHashOrQuery() { // Try fragment first (#access_token=...&refresh_token=...) const hash = typeof window !== 'undefined' ? window.location.hash.replace(/^#/, '') : '' const query = typeof window !== 'undefined' ? window.location.search.replace(/^\?/, '') : '' const params = new URLSearchParams(hash || query) const access_token = params.get('access_token') const refresh_token = params.get('refresh_token') const expires_in = params.get('expires_in') return { access_token, refresh_token, expires_in } } export default function AuthCallbackPage() { const router = useRouter() const [message, setMessage] = useState('Processando autenticação...') useEffect(() => { async function run() { try { const { access_token, refresh_token } = parseHashOrQuery() if (!access_token) { setMessage('Não foi possível detectar o token de acesso. Verifique o link enviado por email.'); return } setMessage('Validando token e obtendo dados do usuário...') // Buscar dados do usuário com o token recebido const user = await getCurrentUser(access_token) // Persistir no localStorage com as chaves esperadas if (typeof window !== 'undefined') { localStorage.setItem(AUTH_STORAGE_KEYS.TOKEN, access_token) if (refresh_token) localStorage.setItem(AUTH_STORAGE_KEYS.REFRESH_TOKEN, refresh_token) try { localStorage.setItem(AUTH_STORAGE_KEYS.USER, JSON.stringify(user)) } catch {} try { localStorage.setItem(AUTH_STORAGE_KEYS.USER_TYPE, user.userType || 'paciente') } catch {} } setMessage('Autenticação concluída! Redirecionando...') // Determinar rota com base no tipo do usuário const target = (user?.userType && USER_TYPE_ROUTES[user.userType]) || '/paciente' // Pequeno delay para UX setTimeout(() => router.replace(target), 600) } catch (err) { console.error('[AUTH CALLBACK] Erro ao processar callback:', err) if (err instanceof AuthenticationError) { setMessage(err.message) } else { setMessage('Erro ao processar o link de autenticação. Tente novamente.') } } } run() }, [router]) return (

Autenticando...

{message}

) }