import { NextRequest, NextResponse } from "next/server";

export function proxy(request: NextRequest) {
  const token = request.cookies.get("kero_token")?.value;
  const userCookie = request.cookies.get("kero_user")?.value;

  const pathname = request.nextUrl.pathname;

  const isDashboardRoute = pathname.startsWith("/dashboard");

  // If no token, redirect to login
  if (isDashboardRoute && !token) {
    return NextResponse.redirect(new URL("/login", request.url));
  }

  // Check user role
  if (isDashboardRoute) {
    if (!userCookie) {
      return NextResponse.redirect(new URL("/login", request.url));
    }

    try {
      const user = JSON.parse(userCookie);

      const role = user.role;

      // Only ADMIN and ACCOUNTS can access dashboard
      if (role !== "ADMIN" && role !== "ACCOUNTS") {
        return NextResponse.redirect(new URL("/login", request.url));
      }

      // ==============================
      // ACCOUNTS ROLE
      // ==============================
      if (role === "ACCOUNTS") {
        const allowedAccountsRoutes = [
          "/dashboard",
          "/dashboard/create-cuppon",
        ];

        const isAllowedRoute = allowedAccountsRoutes.some(
          (route) =>
            pathname === route || pathname.startsWith(`${route}/`)
        );

        if (!isAllowedRoute) {
          return NextResponse.redirect(new URL("/dashboard", request.url));
        }
      }

      // ==============================
      // ADMIN ROLE
      // ==============================
      if (role === "ADMIN") {
        // ADMIN can access all dashboard routes
        // EXCEPT Create Coupon

        const isCreateCouponRoute =
          pathname === "/dashboard/create-cuppon" ||
          pathname.startsWith("/dashboard/create-cuppon/");

        if (isCreateCouponRoute) {
          return NextResponse.redirect(new URL("/dashboard", request.url));
        }
      }
    } catch (error) {
      return NextResponse.redirect(new URL("/login", request.url));
    }
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/dashboard/:path*"],
};