import { createMiddleware } from "@tanstack/react-start";
import { getRequest } from "@tanstack/react-start/server";
import { verifyToken } from "@/lib/auth/token";

export const requireAuth = createMiddleware({ type: "function" }).server(async ({ next }) => {
  const request = getRequest();
  if (!request?.headers) throw new Error("Unauthorized: No request headers available");

  const authHeader = request.headers.get("authorization");
  if (!authHeader?.startsWith("Bearer ")) {
    throw new Error("Unauthorized: No authorization header provided");
  }

  const token = authHeader.slice("Bearer ".length);
  const userId = verifyToken(token);
  if (!userId) throw new Error("Unauthorized: Invalid token");

  return next({ context: { userId } });
});

export const attachAuth = createMiddleware({ type: "function" }).client(async ({ next }) => {
  const token = typeof window !== "undefined" ? localStorage.getItem("auth_token") : null;
  return next({ headers: token ? { Authorization: `Bearer ${token}` } : {} });
});
