const QUEUE_KEY = "inventory2026.offlineQueue";

export type QueuedOperation = {
  id: string;
  type: "receive" | "transfer" | "assemble" | "disassemble" | "adjust";
  payload: Record<string, unknown>;
  createdAt: string;
};

export function readQueue(): QueuedOperation[] {
  if (typeof window === "undefined") return [];
  try {
    return JSON.parse(localStorage.getItem(QUEUE_KEY) ?? "[]") as QueuedOperation[];
  } catch {
    return [];
  }
}

export function writeQueue(queue: QueuedOperation[]) {
  localStorage.setItem(QUEUE_KEY, JSON.stringify(queue));
  window.dispatchEvent(new CustomEvent("offline-queue-changed"));
}

export function queueOperation(type: QueuedOperation["type"], payload: Record<string, unknown>) {
  const operation = { id: crypto.randomUUID(), type, payload, createdAt: new Date().toISOString() };
  writeQueue([...readQueue(), operation]);
  return operation;
}

export function clearQueue(ids: string[]) {
  const remove = new Set(ids);
  writeQueue(readQueue().filter((item) => !remove.has(item.id)));
}
