import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  const accessToken = request.cookies.get('access_token')?.value;
  const refreshToken = request.cookies.get('refresh_token')?.value;
  const { pathname } = request.nextUrl;

  const publicPaths = ['/login', '/set-password'];
  const isPublicPath = publicPaths.some(path =>
    pathname === path || pathname.startsWith(`${path}/`)
  );
  const isAuthenticated = Boolean(accessToken) || Boolean(refreshToken);

  const response = NextResponse.next();

  if ((!accessToken && !refreshToken) && !isPublicPath) {
    return NextResponse.redirect(new URL('/login', request.url));
  }
  if (isAuthenticated && isPublicPath) {
    return NextResponse.redirect(new URL('/home', request.url));
  }
  return response;
}

export const config = {
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico|public).*)'],
};
