import { getSessionUser } from "@/lib/auth";
import { assertMailBillingManagementAccessByEmail } from "@/lib/toss-pay";
import { resolveOriginFromHeaders } from "@/lib/mail-urls";
import { createTossPayBillingRegistrationForOwnerEmail } from "@/lib/toss-pay";

export async function POST(request: Request) {
  const user = await getSessionUser();

  if (!user) {
    return Response.json(
      { error: "unauthorized", message: "로그인이 필요합니다." },
      { status: 401 },
    );
  }

  try {
    await assertMailBillingManagementAccessByEmail(user.email);

    const registration = await createTossPayBillingRegistrationForOwnerEmail({
      email: user.email,
      origin: resolveOriginFromHeaders(request.headers, request.url),
    });

    return Response.json({
      ok: true,
      registration,
    });
  } catch (error) {
    return Response.json(
      {
        error: "billing-registration-failed",
        message:
          error instanceof Error
            ? error.message
            : "토스페이 자동결제 등록 요청에 실패했습니다.",
      },
      { status: error instanceof Error && error.message === "billing-management-forbidden" ? 403 : 400 },
    );
  }
}
