import { completeTossPaymentsBillingRegistration } from "@/lib/toss-pay";
import { resolveOriginFromHeaders } from "@/lib/mail-urls";

export async function GET(request: Request) {
  const url = new URL(request.url);
  const authKey = url.searchParams.get("authKey")?.trim() ?? "";
  const customerKey = url.searchParams.get("customerKey")?.trim() ?? "";
  const registrationToken = url.searchParams.get("registration")?.trim() ?? "";

  if (!authKey || !customerKey || !registrationToken) {
    return Response.redirect(
      new URL("/mail?panel=setup&section=billing&error=billing-registration-failed", request.url),
      302,
    );
  }

  try {
    const result = await completeTossPaymentsBillingRegistration({
      authKey,
      customerKey,
      origin: resolveOriginFromHeaders(request.headers, request.url),
      registrationToken,
    });

    return new Response(null, {
      status: 302,
      headers: { Location: result.redirectUrl },
    });
  } catch (error) {
    const message = error instanceof Error ? error.message : "billing-registration-failed";
    const fallback = new URL("/mail", request.url);
    fallback.searchParams.set("panel", "setup");
    fallback.searchParams.set("section", "billing");
    fallback.searchParams.set("error", "billing-registration-failed");
    fallback.searchParams.set("details", message.slice(0, 200));
    return Response.redirect(fallback, 302);
  }
}
