"use client";

import { useState, useTransition } from "react";
import { Trash2 } from "lucide-react";
import { useRouter } from "next/navigation";
import { toast } from "sonner";
import { Button } from "@/components/ui/button";
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
import { deleteBitacoraArchivoAction } from "@/server/actions/bitacora";

export function BitacoraArchivoDeleteDialog({ archivoId, hitoId }: { archivoId: string; hitoId: string }) {
  const router = useRouter();
  const [open, setOpen] = useState(false);
  const [pending, startTransition] = useTransition();

  return (
    <Dialog open={open} onOpenChange={setOpen}>
      <DialogTrigger asChild>
        <Button size="icon" variant="ghost" className="h-8 w-8 text-destructive hover:bg-danger-subtle hover:text-destructive">
          <Trash2 className="h-4 w-4" />
        </Button>
      </DialogTrigger>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>Eliminar archivo</DialogTitle>
          <DialogDescription>
            ¿Está seguro de eliminar este archivo asociado al hito? Esta acción quitará el archivo de la vista, pero se mantendrá registro en auditoría.
          </DialogDescription>
        </DialogHeader>
        <DialogFooter className="flex-col gap-2 sm:flex-row sm:justify-end">
          <Button type="button" variant="outline" onClick={() => setOpen(false)} disabled={pending}>
            Cancelar
          </Button>
          <Button
            type="button"
            variant="destructive"
            disabled={pending}
            onClick={() => {
              startTransition(() => {
                void deleteBitacoraArchivoAction(archivoId, hitoId)
                  .then(() => {
                    toast.success("Archivo eliminado correctamente.");
                    setOpen(false);
                    router.refresh();
                  })
                  .catch((error: unknown) => {
                    toast.error(error instanceof Error ? error.message : "No fue posible eliminar el archivo.");
                  });
              });
            }}
          >
            Sí, eliminar
          </Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}
