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

/**
 * Smart Proxy / Relay for Sentry/GlitchTip events.
 *
 * Mirroring the klz-2026 pattern:
 * Receives Sentry envelopes from the client, injects the correct DSN,
 * and forwards them to GlitchTip.
 */
export async function POST(request: NextRequest) {
  try {
    const envelope = await request.text();

    const realDsn = env.SENTRY_DSN;

    if (!realDsn) {
      console.warn(
        "[Sentry Relay] Received payload but no SENTRY_DSN configured",
      );
      return NextResponse.json({ status: "ignored" }, { status: 200 });
    }

    const dsnUrl = new URL(realDsn);
    const projectId = dsnUrl.pathname.replace("/", "");
    const relayUrl = `${dsnUrl.protocol}//${dsnUrl.host}/api/${projectId}/envelope/`;

    const response = await fetch(relayUrl, {
      method: "POST",
      body: envelope,
      headers: {
        "Content-Type": "application/x-sentry-envelope",
      },
    });

    if (!response.ok) {
      const errorText = await response.text();
      console.error("[Sentry Relay] GlitchTip API responded with error", {
        status: response.status,
        error: errorText.slice(0, 100),
      });
      return new NextResponse(errorText, { status: response.status });
    }

    return NextResponse.json({ status: "ok" });
  } catch (error) {
    console.error("[Sentry Relay] Failed to relay Sentry request", {
      error: (error as Error).message,
    });
    return NextResponse.json(
      { error: "Internal Server Error" },
      { status: 500 },
    );
  }
}
