"use server"; import { revalidatePath } from "next/cache"; import { redirect } from "next/navigation"; import { isRedirectError } from "next/dist/client/components/redirect-error"; import { getAdminAppPath, toInternalAdminPath } from "@/lib/admin-routing"; import { clearAdminSessionCookie, isAdminAuthenticated } from "@/lib/admin-auth"; import { getSiteSettings, updateMarqueeSettings } from "@/lib/app-config"; import { routing } from "@/i18n/routing"; import { getLocalizedPath } from "@/lib/locale"; async function ensureAdmin() { if (!(await isAdminAuthenticated())) { await clearAdminSessionCookie(); redirect(getAdminAppPath("/")); } } function withMessage(pathname: string, type: "success" | "error", message: string) { const params = new URLSearchParams(); params.set(type, message); return `${pathname}?${params.toString()}`; } async function revalidateMarqueePages() { revalidatePath(toInternalAdminPath("/")); revalidatePath(toInternalAdminPath("/marquee")); const siteSettings = await getSiteSettings(); for (const locale of routing.locales) { revalidatePath(getLocalizedPath(locale, "/", siteSettings.defaultLocale), "layout"); revalidatePath(getLocalizedPath(locale, "/", siteSettings.defaultLocale)); } } export async function saveMarqueeSettingsAction(formData: FormData) { await ensureAdmin(); try { const germanSettings = { row1: String(formData.get("row1-de") ?? "").trim(), row2: String(formData.get("row2-de") ?? "").trim(), row3: String(formData.get("row3-de") ?? "").trim(), row4: String(formData.get("row4-de") ?? "").trim(), }; const settings = { locales: { ar: { ...germanSettings }, en: { ...germanSettings }, de: germanSettings, }, }; if (!germanSettings.row1) { throw new Error("Row 1 fuer de ist erforderlich."); } if (!germanSettings.row2) { throw new Error("Row 2 fuer de ist erforderlich."); } if (!germanSettings.row3) { throw new Error("Row 3 fuer de ist erforderlich."); } if (!germanSettings.row4) { throw new Error("Row 4 fuer de ist erforderlich."); } await updateMarqueeSettings(settings); await revalidateMarqueePages(); redirect(withMessage(getAdminAppPath("/marquee"), "success", "Marquee gespeichert.")); } catch (error) { if (isRedirectError(error)) { throw error; } const message = error instanceof Error ? error.message : "Marquee konnte nicht gespeichert werden."; redirect(withMessage(getAdminAppPath("/marquee"), "error", message)); } }