import { NextRequest, NextResponse } from 'next/server'

// Rotas que não precisam de autenticação
const PUBLIC_PATHS = ['/login', '/api/auth/login', '/api/auth/logout', '/api/auth/session', '/api/agent/install', '/api/agent/heartbeat', '/api/agent/script', '/api/agent/tasks']

export function proxy(req: NextRequest) {
  const { pathname } = req.nextUrl

  // Ignora arquivos estáticos e rotas públicas
  if (
    pathname.startsWith('/_next') ||
    pathname.startsWith('/favicon') ||
    pathname.startsWith('/public') ||
    PUBLIC_PATHS.some((p) => pathname.startsWith(p))
  ) {
    return NextResponse.next()
  }

  // Verifica autenticação pelo cookie de sessão
  const sessionCookie = req.cookies.get('session')?.value

  // Rota protegida sem sessão → redireciona para login
  if (!sessionCookie && !pathname.startsWith('/api/')) {
    const loginUrl = req.nextUrl.clone()
    loginUrl.pathname = '/login'
    // Guarda a URL original para redirecionar após login
    loginUrl.searchParams.set('next', pathname)
    return NextResponse.redirect(loginUrl)
  }

  // Rota de API sem sessão → 401
  if (!sessionCookie && pathname.startsWith('/api/')) {
    return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })
  }

  // Usuário autenticado tentando acessar /login → redireciona para /dashboard
  if (sessionCookie && pathname === '/login') {
    const dashUrl = req.nextUrl.clone()
    dashUrl.pathname = '/dashboard'
    return NextResponse.redirect(dashUrl)
  }

  return NextResponse.next()
}

export const config = {
  matcher: [
    /*
     * Aplica o middleware em todas as rotas exceto:
     * - _next/static (arquivos estáticos)
     * - _next/image (otimização de imagens)
     * - favicon.ico
     */
    '/((?!_next/static|_next/image|favicon.ico).*)',
  ],
}
