import { getSessionUser } from "@/lib/auth";
import { resolveMailBillingProvider } from "@/lib/billing-region-server";
import {
  assertMailBillingManagementAccessByEmail,
  requestManualTossPayBillingChargeByOwnerEmail,
} from "@/lib/toss-pay";

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

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

  if (resolveMailBillingProvider(request.headers, user.preferredLocale) !== "toss-pay") {
    return Response.json(
      {
        error: "toss-pay-billing-unavailable",
        message: "해외 접속에서는 Polar 카드 결제를 이용해주세요.",
      },
      { status: 403 },
    );
  }

  try {
    await assertMailBillingManagementAccessByEmail(user.email);

    const charge = await requestManualTossPayBillingChargeByOwnerEmail(user.email);

    return Response.json({
      charge,
      ok: true,
    });
  } catch (error) {
    return Response.json(
      {
        error: "manual-charge-failed",
        message:
          error instanceof Error ? error.message : "수동 청구 실행에 실패했습니다.",
      },
      { status: error instanceof Error && error.message === "billing-management-forbidden" ? 403 : 400 },
    );
  }
}
