"use client";
import { useState } from "react";
import { toast } from "sonner";
import { Archive, RotateCcw, Loader2 } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog";
import { useArchiveCase, useRestoreCase, type ArchiveResult } from "@/lib/api/cases";
function paperclipMessage(res: ArchiveResult, action: "archive" | "restore"): string {
const verb = action === "archive" ? "אורכן" : "שוחזר";
switch (res.paperclip?.status) {
case "archived": {
const cancelled = res.paperclip.issues_cancelled?.length ?? 0;
const issuesNote = cancelled > 0 ? ` (${cancelled} משימות פתוחות בוטלו)` : "";
return `התיק ${verb}. גם הפרויקט ב-Paperclip${issuesNote}.`;
}
case "restored":
return `התיק ${verb}. גם הפרויקט ב-Paperclip ${verb}.`;
case "not_found":
return `התיק ${verb}. לא נמצא פרויקט מקביל ב-Paperclip.`;
case "error":
return `התיק ${verb} ב-legal-ai, אך סנכרון Paperclip נכשל${
res.paperclip?.message ? `: ${res.paperclip.message}` : "."
}`;
default:
return `התיק ${verb}.`;
}
}
export function CaseArchiveAction({
caseNumber,
archivedAt,
}: {
caseNumber: string;
archivedAt?: string | null;
}) {
const [open, setOpen] = useState(false);
const archive = useArchiveCase(caseNumber);
const restore = useRestoreCase(caseNumber);
const isArchived = Boolean(archivedAt);
const pending = archive.isPending || restore.isPending;
function handleArchive() {
archive.mutate(undefined, {
onSuccess: (res) => {
setOpen(false);
toast.success(paperclipMessage(res, "archive"));
},
onError: (err) =>
toast.error(err instanceof Error ? err.message : "שגיאה בארכוב"),
});
}
function handleRestore() {
restore.mutate(undefined, {
onSuccess: (res) => {
toast.success(paperclipMessage(res, "restore"));
},
onError: (err) =>
toast.error(err instanceof Error ? err.message : "שגיאה בשחזור"),
});
}
if (isArchived) {
return (
);
}
return (
);
}