import { NextRequest, NextResponse } from "next/server";
import { openApiSpec } from "@/lib/openapi";

function getRequestOrigin(req: NextRequest) {
  const forwardedProto = req.headers.get("x-forwarded-proto")?.split(",")[0]?.trim();
  const forwardedHost = req.headers.get("x-forwarded-host")?.split(",")[0]?.trim();
  const host = forwardedHost ?? req.headers.get("host");
  const proto = forwardedProto ?? req.nextUrl.protocol.replace(":", "");
  const origin = host ? `${proto}://${host}` : req.nextUrl.origin;

  try {
    const url = new URL(origin);
    if (url.protocol === "http:" || url.protocol === "https:") return url.origin;
  } catch {
    // Fall through to the same-origin server below.
  }

  return "/";
}

export async function GET(req: NextRequest) {
  return NextResponse.json({
    ...openApiSpec,
    servers: [
      {
        url: getRequestOrigin(req),
        description: "Current request origin",
      },
      {
        url: "/",
        description: "Same-origin fallback",
      },
    ],
  }, {
    headers: {
      "Cache-Control": "no-store",
    },
  });
}
