// 간이 인증 헬퍼: 쿠키(uid) 우선, 없으면 헤더(x-user-id)에서 사용자 식별자를 읽습니다.
import prisma from "@/lib/prisma";

export function getUserIdFromRequest(req: Request): string | null {
  try {
    const cookieHeader = req.headers.get("cookie") || "";
    const uidMatch = cookieHeader
      .split(";")
      .map((s) => s.trim())
      .find((pair) => pair.startsWith("uid="));
    if (uidMatch) {
      const val = uidMatch.split("=")[1] || "";
      if (val) return decodeURIComponent(val);
    }
    const id = req.headers.get("x-user-id");
    return id && id.length > 0 ? id : null;
  } catch {
    return null;
  }
}

// 개발 환경에서만: 인증 정보가 없으면 admin 사용자 ID를 반환
// DB 조회 결과를 프로세스 전역에 캐싱해 과도한 쿼리를 방지
export async function getUserIdOrAdmin(req: Request): Promise<string | null> {
  const uid = getUserIdFromRequest(req);
  if (uid) return uid;
  if (process.env.NODE_ENV === "production") return null;
  try {
    const globalAny = global as unknown as { __ADMIN_UID?: string };
    if (globalAny.__ADMIN_UID) return globalAny.__ADMIN_UID;
    const admin = await prisma.user.findUnique({ where: { nickname: "admin" }, select: { userId: true } });
    if (admin?.userId) {
      globalAny.__ADMIN_UID = admin.userId;
      return admin.userId;
    }
  } catch {
    // ignore
  }
  return null;
}

