import { inArray } from "drizzle-orm"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { saveMaintenance } from "@/actions/admin-maintenance"; import { StatusCard } from "@/components/admin/dashboard"; import { Button } from "@/components/ui/button"; import { db, WebsiteSetting } from "@/lib/db"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; const KEYS = [ "maintenance_enabled", "maintenance_message", "min_maintenance_login_rank", ] as const; export default async function AdminMaintenance() { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.SETTINGS_VIEW, session.user.rank)) { redirect("/admin"); } const t = await getTranslations("pages.admin.maintenance"); let rows: { key: string; value: string }[] = []; try { rows = await db .select({ key: WebsiteSetting.key, value: WebsiteSetting.value }) .from(WebsiteSetting) .where(inArray(WebsiteSetting.key, [...KEYS])); } catch { rows = []; } const byKey = new Map(rows.map((r) => [r.key, r.value])); const enabledRaw = byKey.get("maintenance_enabled") ?? "0"; const enabled = enabledRaw === "1" || enabledRaw.toLowerCase() === "true"; const message = byKey.get("maintenance_message") ?? ""; const minRankRaw = byKey.get("min_maintenance_login_rank") ?? "5"; const minRank = Number.parseInt(minRankRaw, 10); const minRankValue = Number.isFinite(minRank) ? minRank : 5; return (

{t("currentState")}

{enabled ? t("enabled") : t("disabled")}
{t("maintenanceCurrently", { status: enabled ? t("enabled") : t("disabled"), })}

{enabled ? t("onlyRankCanLogin", { rank: minRankValue }) : t("hotelOpenToEveryone")}

{t("settings")}