import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle,
} from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import type { PrintBatchPlan } from "@/utils/printBatchChunks";

type PrintBatchConfirmDialogProps = {
  open: boolean;
  plan: PrintBatchPlan | null;
  onConfirm: () => void;
  onOpenChange: (open: boolean) => void;
};

export default function PrintBatchConfirmDialog({
  open,
  plan,
  onConfirm,
  onOpenChange,
}: PrintBatchConfirmDialogProps) {
  if (!plan) {
    return null;
  }

  const { totalOrders, chunkCount, chunkSize, documentLabel } = plan;
  const plural = totalOrders === 1 ? "pedido" : "pedidos";
  const partPlural = chunkCount === 1 ? "parte" : "partes";

  const handleOpenChange = (nextOpen: boolean) => {
    onOpenChange(nextOpen);
  };

  return (
    <Dialog open={open} onOpenChange={handleOpenChange}>
      <DialogContent className="sm:max-w-md">
        <DialogHeader>
          <DialogTitle>Confirmar impresión en tanda</DialogTitle>
          <DialogDescription asChild>
            <div className="space-y-3 text-sm text-muted-foreground pt-1">
              <p>
                Se imprimirán <strong className="text-foreground">{totalOrders} {plural}</strong>{" "}
                ({documentLabel}).
              </p>
              {chunkCount > 1 ? (
                <p>
                  El sistema los procesará en <strong className="text-foreground">{chunkCount} {partPlural}</strong>{" "}
                  de hasta <strong className="text-foreground">{chunkSize}</strong> pedidos cada una.
                  No es un error: así evitamos que el navegador se cuelgue con volúmenes altos.
                </p>
              ) : (
                <p>Una sola parte; se abrirá una ventana de impresión.</p>
              )}
              <p className="text-xs">
                Se abrirá otra pestaña con el documento; usted decide cuándo imprimir desde el navegador.
              </p>
            </div>
          </DialogDescription>
        </DialogHeader>
        <DialogFooter className="gap-2 sm:gap-0">
          <Button variant="outline" onClick={() => onOpenChange(false)}>
            Cancelar
          </Button>
          <Button onClick={onConfirm}>Imprimir tanda</Button>
        </DialogFooter>
      </DialogContent>
    </Dialog>
  );
}
