import { revalidatePath } from "next/cache";
import { getSessionUser } from "@/lib/auth";
import {
  getKavenixDomainSetupPromotionCodes,
  updateKavenixDomainSetupPromotionCode,
} from "@/lib/domain-setup-promotions";
import { isKavenixAdminEmail } from "@/lib/kavenix-admin";

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

export async function PATCH(
  request: Request,
  context: { params: Promise<{ promotionCodeId: string }> },
) {
  const user = await getSessionUser();

  if (!user || !isKavenixAdminEmail(user.email)) {
    return Response.json({ error: "forbidden", ok: false }, { status: 403 });
  }

  const { promotionCodeId: rawPromotionCodeId } = await context.params;
  const promotionCodeId = Number(rawPromotionCodeId);
  const payload = (await request.json().catch(() => null)) as { isActive?: unknown } | null;

  if (!Number.isInteger(promotionCodeId) || promotionCodeId <= 0 || typeof payload?.isActive !== "boolean") {
    return Response.json({ error: "invalid-request", ok: false }, { status: 400 });
  }

  try {
    await updateKavenixDomainSetupPromotionCode(promotionCodeId, {
      isActive: payload.isActive,
    });
    const codes = await getKavenixDomainSetupPromotionCodes();
    revalidatePath("/kavenix");
    return Response.json({ codes, ok: true });
  } catch (error) {
    const code = error instanceof Error ? error.message : "promotion-code-update-failed";
    return Response.json(
      {
        error: code,
        message:
          code === "promotion-code-not-found"
            ? "프로모션 코드를 찾을 수 없습니다."
            : "프로모션 코드 상태 변경에 실패했습니다.",
        ok: false,
      },
      { status: code === "promotion-code-not-found" ? 404 : 400 },
    );
  }
}
