"use server";

import { revalidatePath } from "next/cache";
import { currentAdmin } from "@/lib/auth";
import { prisma } from "@/lib/prisma";

const paymentStatuses = new Set(["PENDING", "PAID", "FAILED", "REFUNDED"]);
const fulfillmentStatuses = new Set(["NEW", "PROCESSING", "SHIPPED", "COMPLETED", "CANCELLED"]);

export async function updateOrderStatus(orderId: string, form: FormData) {
  const admin = await currentAdmin();
  if (!admin) throw new Error("Admin session required.");

  const paymentStatus = String(form.get("paymentStatus") || "PENDING");
  const fulfillmentStatus = String(form.get("fulfillmentStatus") || "NEW");

  if (!paymentStatuses.has(paymentStatus)) throw new Error("Invalid payment status.");
  if (!fulfillmentStatuses.has(fulfillmentStatus)) throw new Error("Invalid fulfillment status.");

  await prisma.order.update({
    where: { id: orderId },
    data: {
      paymentStatus,
      fulfillmentStatus,
      trackingNumber: String(form.get("trackingNumber") || "") || null,
      adminNotes: String(form.get("adminNotes") || "") || null
    }
  });

  revalidatePath("/admin/orders");
  revalidatePath(`/admin/orders/${orderId}`);
}
