import { desc } from "drizzle-orm"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { markAllAlertsRead, sendHotelAlert } from "@/actions/admin-alerts"; import { StatusCard } from "@/components/admin/dashboard"; import { Button } from "@/components/ui/button"; import { AlertLogs, db } from "@/lib/db"; import { formatDate } from "@/lib/format-date"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; const CRITICAL = new Set(["critical", "error", "danger"]); const WARNING = new Set(["warning", "warn"]); function severityColor(severity: string): string { switch (severity.toLowerCase()) { case "critical": case "error": case "danger": return "var(--color-danger)"; case "warning": case "warn": return "var(--admin-accent)"; case "success": return "var(--color-secondary)"; case "info": case "notice": return "var(--color-accent)"; default: return "var(--admin-text-muted)"; } } function Badge({ label, color }: { label: string; color: string }) { return ( {label} ); } export default async function AdminAlerts() { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.NOTIFICATIONS_VIEW, session.user.rank)) { redirect("/admin"); } const t = await getTranslations("pages.admin.alerts"); let alerts: (typeof AlertLogs.$inferSelect)[] = []; try { alerts = await db .select() .from(AlertLogs) .orderBy(desc(AlertLogs.id)) .limit(100); } catch { alerts = []; } const critical = alerts.filter((a) => CRITICAL.has((a.severity || "").toLowerCase()), ).length; const warnings = alerts.filter((a) => WARNING.has((a.severity || "").toLowerCase()), ).length; const unread = alerts.filter((a) => !a.isRead).length; return (
0 ? "danger" : "ok"} icon="🚨" /> 0 ? "warn" : "neutral"} icon="⚠️" /> 0 ? "warn" : "ok"} icon="📨" />

{t("form.send")}

{t.rich("form.description", { code: (chunks) => {chunks}, })}