"use client"

import {
  AlertDialog,
  AlertDialogAction,
  AlertDialogCancel,
  AlertDialogContent,
  AlertDialogDescription,
  AlertDialogFooter,
  AlertDialogHeader,
  AlertDialogMedia,
  AlertDialogTitle,
} from "@/components/ui/alert-dialog"
import type { FlowPurgeDto } from "@mmapp/contracts/traffic-flow"
import { AlertCircleIcon, LoaderCircleIcon } from "lucide-react"

function formatDbFileBytes(n: number): string {
  if (n < 1024) return `${n} Б`
  if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} КБ`
  return `${(n / (1024 * 1024)).toFixed(1)} МБ`
}

export function formatFlowPurgeResult(result: FlowPurgeDto): string {
  const rows =
    result.deleted.buckets +
    result.deleted.minuteStats +
    result.deleted.minuteDims +
    result.deleted.dailyDims
  const vacuumHint = result.vacuumed ? "" : " VACUUM не выполнен."
  return `Удалено строк: ${rows}. Файл ${formatDbFileBytes(result.fileBytesBefore)} → ${formatDbFileBytes(result.fileBytesAfter)}.${vacuumHint}`
}

export function NetflowPurgeConfirm({
  open,
  busy,
  onConfirm,
  onCancel,
}: {
  open: boolean
  busy?: boolean
  onConfirm: () => void
  onCancel: () => void
}) {
  return (
    <AlertDialog open={open} onOpenChange={(v) => { if (!v && !busy) onCancel() }}>
      <AlertDialogContent size="default">
        <AlertDialogHeader>
          <AlertDialogMedia className="bg-destructive/10 text-destructive">
            <AlertCircleIcon />
          </AlertDialogMedia>
          <AlertDialogTitle>Сбросить данные NetFlow?</AlertDialogTitle>
          <AlertDialogDescription>
            Будут удалены сессии и агрегаты (minute/daily) из SQLite, затем VACUUM.
            Ключи WireGuard, пиры JH, настройки коллектора и кэш RIPE сохранятся.
            На время операции приём IPFIX остановится.
          </AlertDialogDescription>
        </AlertDialogHeader>
        <AlertDialogFooter>
          <AlertDialogCancel disabled={busy} onClick={onCancel}>Отмена</AlertDialogCancel>
          <AlertDialogAction
            variant="destructive"
            disabled={busy}
            onClick={onConfirm}
          >
            {busy ? <LoaderCircleIcon className="size-4 animate-spin" /> : null}
            {busy ? "Сброс…" : "Сбросить"}
          </AlertDialogAction>
        </AlertDialogFooter>
      </AlertDialogContent>
    </AlertDialog>
  )
}
