import { processQueuedMailboxDeliveries, processQueuedMailboxDrafts } from "@/lib/official-mail";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

function hasValidCronSecret(request: Request) {
  const expected = process.env.OFFICIAL_MAIL_CRON_SECRET?.trim();

  if (!expected) {
    return false;
  }

  return request.headers.get("x-officialmail-cron-secret")?.trim() === expected;
}

function getBatchSize() {
  const configured = Number(process.env.OUTBOUND_DELIVERY_BATCH_SIZE ?? "");
  return Number.isFinite(configured) ? configured : undefined;
}

export async function POST(request: Request) {
  if (!hasValidCronSecret(request)) {
    return Response.json(
      { error: "forbidden", message: "유효한 크론 시크릿이 필요합니다." },
      { status: 403 },
    );
  }

  try {
    const summary = await processQueuedMailboxDeliveries({
      batchSize: getBatchSize(),
    });
    const drafts = await processQueuedMailboxDrafts();
    return Response.json({ ok: true, summary, drafts });
  } catch (error) {
    return Response.json(
      {
        error: "outbound-delivery-run-failed",
        message:
          error instanceof Error
            ? error.message
            : "메일 발송 대기열 처리에 실패했습니다.",
      },
      { status: 500 },
    );
  }
}
