import { AdminShell } from "@/components/admin/admin-shell";
import { AdminTable, StatusPill } from "@/components/admin/admin-ui";
import { prisma } from "@/lib/db";
import { formatDate, instancePublicUrl } from "@/lib/utils";

export const dynamic = "force-dynamic";

async function check(url: string) {
  const started = Date.now();
  try {
    const response = await fetch(url, { cache: "no-store", signal: AbortSignal.timeout(5000) });
    return { status: response.ok ? "healthy" : "degraded", responseMs: Date.now() - started };
  } catch {
    return { status: "unhealthy", responseMs: null };
  }
}

export default async function RuntimeHealthPage() {
  const instances = await prisma.instance.findMany({ include: { user: true }, orderBy: { updated_at: "desc" } });
  const checks = await Promise.all(instances.map((instance) => check(instancePublicUrl(instance.subdomain))));

  return (
    <AdminShell>
      <div className="mx-auto max-w-7xl space-y-6">
        <div>
          <p className="text-sm text-slate-500">Tenant Runtime Health Checks / List</p>
          <h1 className="text-3xl font-bold">Tenant Runtime Health Checks</h1>
        </div>
        <AdminTable
          headers={["Tenant", "Status", "Driver", "Response", "Checked at", "Runtime"]}
          rows={instances.map((instance, index) => {
            const result = checks[index];
            return [
              instance.user.full_name || instance.user.username,
              <StatusPill key="status" tone={result.status === "healthy" ? "green" : result.status === "degraded" ? "amber" : "red"}>{result.status}</StatusPill>,
              <StatusPill key="driver" tone="blue">{process.env.DOKPLOY_API_MODE || "trpc"}</StatusPill>,
              result.responseMs === null ? "-" : `${result.responseMs} ms`,
              formatDate(new Date()),
              instance.name
            ];
          })}
        />
      </div>
    </AdminShell>
  );
}
