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

/**
 * Middleware برای احراز هویت و حفاظت routes
 * 
 * این middleware:
 * 1. بررسی توکن از HTTP-only cookie
 * 2. کاربران بدون توکن را به /login تغییر مسیر می‌دهد
 * 3. کاربران لاگین‌شده که به /login می‌روند را به / تغییر مسیر می‌دهد
 */

const publicRoutes = ["/login", "/register", "/"];
const protectedRoutes = ["/(protected)", "/dashboard", "/profile"];

export function middleware(request: NextRequest) {
  const pathname = request.nextUrl.pathname;
  const token = request.cookies.get("token")?.value;

  // بررسی اینکه آیا route protected است
  const isProtectedRoute = protectedRoutes.some(
    (route) => pathname.startsWith(route) || pathname === route
  );
  
  // بررسی اینکه آیا route public است
  const isPublicRoute = publicRoutes.some(
    (route) => pathname.startsWith(route) || pathname === route
  );

  // اگر کاربر토کن ندارد و سعی می‌کند به protected route برود
  if (isProtectedRoute && !token) {
    return NextResponse.redirect(new URL("/login", request.url));
  }

  // اگر کاربر توکن دارد و سعی می‌کند به auth routes برود
  if (token && (pathname === "/login" || pathname === "/register")) {
    return NextResponse.redirect(new URL("/", request.url));
  }

  // ادامه رفتن درخواست
  return NextResponse.next();
}

/**
 * Matcher برای مسیرهایی که middleware برای آن‌ها اجرا شود
 */
export const config = {
  matcher: [
    // Protected routes
    "/(protected)/:path*",
    "/dashboard/:path*",
    "/profile/:path*",
    
    // Auth routes
    "/login",
    "/register",
  ],
};
