import { NextRequest, NextResponse } from "next/server";
import {
  AUTH_COOKIE_NAME,
  clearAuthCookie,
  isLegacyDevMockToken,
} from "@/lib/auth-cookie";

const ADMIN_COOKIE = "agnet_admin_token";

const FARMER_PROTECTED = ["/farmers/dashboard", "/farmers/onboarding"];
const ADMIN_PROTECTED = ["/admin/cases", "/admin"];

export function middleware(req: NextRequest) {
  const { pathname } = req.nextUrl;

  if (pathname.startsWith("/admin/login")) {
    return NextResponse.next();
  }

  if (ADMIN_PROTECTED.some((p) => pathname === p || pathname.startsWith(`${p}/`))) {
    const adminToken = req.cookies.get(ADMIN_COOKIE)?.value;
    if (!adminToken) {
      const loginUrl = req.nextUrl.clone();
      loginUrl.pathname = "/admin/login";
      loginUrl.searchParams.set("redirect", pathname);
      return NextResponse.redirect(loginUrl);
    }
    return NextResponse.next();
  }

  const token = req.cookies.get(AUTH_COOKIE_NAME)?.value;

  if (
    token &&
    process.env.CORE_API_USE_MOCK !== "true" &&
    process.env.PLAYWRIGHT !== "1" &&
    isLegacyDevMockToken(token) &&
    FARMER_PROTECTED.some((p) => pathname.startsWith(p))
  ) {
    const loginUrl = req.nextUrl.clone();
    loginUrl.pathname = "/farmers/apply";
    loginUrl.searchParams.set("reason", "session_expired");
    const response = NextResponse.redirect(loginUrl);
    clearAuthCookie(response);
    return response;
  }

  if (FARMER_PROTECTED.some((p) => pathname.startsWith(p)) && !token) {
    const loginUrl = req.nextUrl.clone();
    loginUrl.pathname = "/farmers/login";
    loginUrl.searchParams.set("redirect", pathname);
    return NextResponse.redirect(loginUrl);
  }

  return NextResponse.next();
}

export const config = {
  matcher: [
    "/farmers/dashboard/:path*",
    "/farmers/onboarding/:path*",
    "/admin/:path*",
  ],
};
