import { NextRequest, NextResponse } from "next/server" import { getCookieCache } from "better-auth/cookies" // Rotas públicas explícitas (não autenticadas) const PUBLIC_PATHS = [/^\/login$/] // Rotas somente admin const ADMIN_ONLY_PATHS = [/^\/admin(?:$|\/)/] const APP_HOME = "/dashboard" export async function middleware(request: NextRequest) { const { pathname, search } = request.nextUrl if (PUBLIC_PATHS.some((pattern) => pattern.test(pathname))) return NextResponse.next() const session = await getCookieCache(request) if (!session?.user) { const redirectUrl = new URL("/login", request.url) redirectUrl.searchParams.set("callbackUrl", pathname + search) return NextResponse.redirect(redirectUrl) } const role = (session.user as { role?: string })?.role?.toLowerCase() ?? "agent" const isAdmin = role === "admin" // Em desenvolvimento, evitamos bloquear rotas admin por possíveis diferenças // de cache de cookie/sessão entre dev server e middleware. Em produção, aplica o gate. if ( process.env.NODE_ENV === "production" && !isAdmin && ADMIN_ONLY_PATHS.some((pattern) => pattern.test(pathname)) ) { return NextResponse.redirect(new URL(APP_HOME, request.url)) } return NextResponse.next() } export const config = { // Evita executar para assets e imagens estáticas matcher: [ "/((?!api|_next/static|_next/image|favicon.ico|icon.png).*)", ], }