import { NextRequest, NextResponse } from "next/server";
import { getSessionFromRequest } from "@/lib/session";
import { isAdmin, isWholesale } from "@/lib/roles";

const LOGIN = "/login";

export async function middleware(request: NextRequest) {
  const { pathname } = request.nextUrl;
  const user = await getSessionFromRequest(request);

  const needsAuth =
    pathname.startsWith("/messages") ||
    pathname.startsWith("/settings") ||
    pathname.startsWith("/admin") ||
    pathname.startsWith("/trade");

  if (needsAuth && !user) {
    const url = request.nextUrl.clone();
    url.pathname = pathname.startsWith("/trade") ? "/trade" : LOGIN;
    if (!pathname.startsWith("/trade")) {
      url.searchParams.set("next", pathname);
    }
    if (pathname.startsWith("/trade")) {
      return NextResponse.next();
    }
    return NextResponse.redirect(url);
  }

  if (pathname.startsWith("/admin") && !isAdmin(user)) {
    return NextResponse.redirect(new URL("/directory", request.url));
  }

  if (pathname.startsWith("/trade") && pathname !== "/trade" && user && !isWholesale(user)) {
    return NextResponse.redirect(new URL("/trade", request.url));
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/messages/:path*", "/settings/:path*", "/admin/:path*", "/trade/:path*"],
};
