"use server";

import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
import { prisma } from "@/lib/prisma";
import { requirePermission } from "@/lib/permissions";

const VALID_STATUSES = ["pending", "paid", "failed", "shipped", "delivered", "cancelled"];

export async function updateOrderStatus(id: string, formData: FormData) {
  await requirePermission("orders", "edit");
  const status = String(formData.get("status") ?? "");
  if (!VALID_STATUSES.includes(status)) throw new Error("Invalid status");

  const courierPartnerId = String(formData.get("courierPartnerId") ?? "").trim() || null;
  const trackingNumber = String(formData.get("trackingNumber") ?? "").trim() || null;

  const existing = await prisma.order.findUniqueOrThrow({ where: { id } });

  await prisma.order.update({
    where: { id },
    data: {
      status,
      courierPartnerId,
      trackingNumber,
      shippedAt: status === "shipped" && !existing.shippedAt ? new Date() : existing.shippedAt,
      deliveredAt: status === "delivered" && !existing.deliveredAt ? new Date() : existing.deliveredAt,
    },
  });
  revalidatePath(`/iv-manage-84x2/orders/${id}`);
  revalidatePath("/iv-manage-84x2/orders");
  revalidatePath("/iv-manage-84x2/shipping/tracking");
  redirect(`/iv-manage-84x2/orders/${id}?success=Order+updated.`);
}
