function readConfiguredPublicOrigin() {
  const raw = String(process.env.NEXT_PUBLIC_PUBLIC_CATALOG_BASE_URL || "").trim();
  if (!raw) return "";
  try {
    return new URL(raw).origin;
  } catch {
    return "";
  }
}

function isLocalHostname(hostname: string) {
  const normalized = hostname.trim().toLowerCase();
  return normalized === "localhost" || normalized === "127.0.0.1" || normalized.endsWith(".localhost");
}

export function resolvePublicOrigin(request: Request) {
  const requestUrl = new URL(request.url);
  const configuredOrigin = readConfiguredPublicOrigin();
  const forwardedHost = String(request.headers.get("x-forwarded-host") || "")
    .split(",")[0]
    ?.trim();
  const forwardedProto = String(
    request.headers.get("x-forwarded-proto") || request.headers.get("x-forwarded-protocol") || ""
  )
    .split(",")[0]
    ?.trim()
    .replace(/:$/, "");
  const host = forwardedHost || request.headers.get("host") || requestUrl.host;
  const protocol = forwardedProto || requestUrl.protocol.replace(/:$/, "") || "https";
  const hostname = host.split(":")[0] || "";

  if (host && !isLocalHostname(hostname)) {
    return `${protocol}://${host}`;
  }

  if (configuredOrigin) {
    return configuredOrigin;
  }

  return requestUrl.origin;
}

export function buildPublicUrl(request: Request, pathname: string) {
  return new URL(pathname, resolvePublicOrigin(request));
}
