import { db } from "./client" const ADMIN_SELF_REGISTRATION_KEY = "admin.self_registration_enabled" const PUBLIC_HEADER_BANNER_KEY = "public.header_banner" type PublicHeaderBannerRecord = { enabled: boolean message: string ctaLabel?: string ctaHref?: string } export type PublicHeaderBanner = { message: string ctaLabel?: string ctaHref?: string } function resolveEnvFallback(): boolean { return process.env.CMS_ADMIN_SELF_REGISTRATION_ENABLED === "true" } function parseStoredBoolean(value: string): boolean | null { if (value === "true") { return true } if (value === "false") { return false } return null } function parsePublicHeaderBanner(value: string): PublicHeaderBannerRecord | null { try { const parsed = JSON.parse(value) as Record if (typeof parsed.enabled !== "boolean" || typeof parsed.message !== "string") { return null } return { enabled: parsed.enabled, message: parsed.message, ctaLabel: typeof parsed.ctaLabel === "string" ? parsed.ctaLabel : undefined, ctaHref: typeof parsed.ctaHref === "string" ? parsed.ctaHref : undefined, } } catch { return null } } export async function isAdminSelfRegistrationEnabled(): Promise { try { const setting = await db.systemSetting.findUnique({ where: { key: ADMIN_SELF_REGISTRATION_KEY }, select: { value: true }, }) if (!setting) { return resolveEnvFallback() } const parsed = parseStoredBoolean(setting.value) if (parsed === null) { return resolveEnvFallback() } return parsed } catch { // Fallback while migrations are not yet applied in a local environment. return resolveEnvFallback() } } export async function setAdminSelfRegistrationEnabled(enabled: boolean): Promise { await db.systemSetting.upsert({ where: { key: ADMIN_SELF_REGISTRATION_KEY }, create: { key: ADMIN_SELF_REGISTRATION_KEY, value: enabled ? "true" : "false", }, update: { value: enabled ? "true" : "false", }, }) } export async function getPublicHeaderBanner(): Promise { try { const setting = await db.systemSetting.findUnique({ where: { key: PUBLIC_HEADER_BANNER_KEY }, select: { value: true }, }) if (!setting) { return null } const parsed = parsePublicHeaderBanner(setting.value) if (!parsed || !parsed.enabled) { return null } return { message: parsed.message, ctaLabel: parsed.ctaLabel, ctaHref: parsed.ctaHref, } } catch { return null } }