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

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

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

  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 },
    );
  }
}
