import { NextResponse } from "next/server";
import { getPayload } from "payload";
import configPromise from "@payload-config";
import { getServerAppServices } from "@/lib/services/create-services.server";

export async function POST(req: Request) {
  const authHeader = req.headers.get("authorization");
  if (authHeader !== `Bearer ${process.env.PAYLOAD_SECRET}`) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const { logger } = getServerAppServices();

  try {
    logger.info("Starting programmatic Payload migrations...");
    const payload = await getPayload({ config: configPromise });

    await payload.db.migrate();

    logger.info("Successfully executed Payload migrations.");
    return NextResponse.json({
      success: true,
      message: "Migrations executed successfully.",
    });
  } catch (error) {
    logger.error("Failed to run migrations remotely", { error });
    return NextResponse.json(
      {
        error:
          error instanceof Error ? error.message : "Unknown error occurred",
      },
      { status: 500 },
    );
  }
}
