"use server";

import { revalidatePath } from "next/cache";
import { hasPermission } from "@/lib/adminAuth";
import { connectDB } from "@/lib/db";
import { Order } from "@/models/Order";

async function canEditChecklist() {
  return hasPermission("orders_edit");
}

function revalidateOrder(orderId: string) {
  revalidatePath(`/de/admin/orders/${orderId}`);
}

export async function toggleChecklistItemAction(orderId: string, itemId: string, done: boolean) {
  if (!(await canEditChecklist())) return;
  await connectDB();
  await Order.updateOne(
    { _id: orderId },
    { $set: { "checklist.$[item].done": done, "checklist.$[item].doneAt": done ? new Date() : null } },
    { arrayFilters: [{ "item._id": itemId }] }
  );
  revalidateOrder(orderId);
}

export async function addChecklistItemAction(orderId: string, text: string) {
  if (!(await canEditChecklist())) return;
  const trimmed = text.trim();
  if (!trimmed) return;
  await connectDB();
  await Order.updateOne({ _id: orderId }, { $push: { checklist: { text: trimmed, done: false, doneAt: null } } });
  revalidateOrder(orderId);
}

export async function deleteChecklistItemAction(orderId: string, itemId: string) {
  if (!(await canEditChecklist())) return;
  await connectDB();
  await Order.updateOne({ _id: orderId }, { $pull: { checklist: { _id: itemId } } });
  revalidateOrder(orderId);
}
