"use client";
import dynamic from "next/dynamic";
import {
Activity,
AlertTriangle,
Bell,
BellRing,
Clock,
Cog,
Database,
Globe,
Key,
Loader2,
Map,
Server,
Users,
} from "lucide-react";
import { QueryErrorRow } from "@/components/ui/query-error-row";
import { Skeleton } from "@/components/ui/skeleton";
import { formatDateTime } from "@/lib/format";
import { SettingsCard } from "@/components/settings/settings-card";
import { SettingsCardHeader } from "@/components/settings/_card-header";
import { useFormatters, useTranslations } from "@/lib/i18n/context";
import {
StatusItem,
usePublicVersion,
useSystemStatus,
type FailingQueue,
} from "./_shared";
// v1.4.16 phase B3: Recharts is ~108 KiB Brotli — defer-load the host
// metrics chart so the system-status page only ships it when an admin
// actually opens this view. Splitting at the wrapper boundary (instead
// of per-primitive) keeps Recharts' `findAllByType` reconciliation
// working — same pattern the insights page uses for the scatter chart.
const HostMetricsChart = dynamic(
() =>
import("@/components/charts/chart-runtime").then((mod) => ({
default: mod.HostMetricsChart,
})),
{
ssr: false,
loading: () => (
{t("admin.failingJobs.unavailable")}
{t("admin.failingJobs.none", { hours: failingJobs.windowHours })}
{queue.queue}{" "}
{tCount("admin.failingJobs.count", queue.failures, {
count: queue.failures,
})}
{t("admin.failingJobs.lastFailed", {
when: formatDateTime(queue.lastFailedAt),
})}
{queue.lastError}
{failingJobs.queues.map((queue) => (
)}