"use server"; import { revalidatePath } from "next/cache"; import { executeLegacyHotelMutation } from "@/features/housekeeping/domains/hotel/services/mutations"; import { requirePermission } from "@/lib/admin/guard"; import { PERMS } from "@/lib/permissions"; import { siteSettings } from "@/lib/services/site-settings"; function text(formData: FormData, key: string): string { return String(formData.get(key) ?? "") .normalize("NFC") .trim(); } function enabled(formData: FormData, key: string): boolean { return ["1", "true", "on"].includes(text(formData, key).toLowerCase()); } async function actor() { return requirePermission(PERMS.RADIO_EDIT); } export async function saveRadioSetting(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation(staff, "radio.settings.save-one", { key: text(formData, "key"), value: String(formData.get("value") ?? ""), comment: text(formData, "comment") || undefined, }); siteSettings.reload(); revalidatePath("/admin/radio/settings"); } export async function saveRadioSettings(formData: FormData): Promise { const staff = await actor(); const entries = text(formData, "__keys") .split(",") .map((key) => key.trim()) .filter(Boolean) .map((key) => ({ key, value: String(formData.get(key) ?? "") })); await executeLegacyHotelMutation(staff, "radio.settings.save-many", { entries, }); siteSettings.reload(); revalidatePath("/admin/radio/settings"); } function bannerInput(formData: FormData) { return { imagePath: text(formData, "imagePath"), title: text(formData, "title") || undefined, description: text(formData, "description") || undefined, sortOrder: Number(text(formData, "sortOrder") || 0), isActive: enabled(formData, "isActive"), }; } export async function createRadioBanner(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation( staff, "radio.banner.create", bannerInput(formData), ); revalidatePath("/admin/radio/banners"); } export async function updateRadioBanner(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation(staff, "radio.banner.update", { id: text(formData, "id"), ...bannerInput(formData), }); revalidatePath("/admin/radio/banners"); } export async function deleteRadioBanner(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation(staff, "radio.banner.delete", { id: text(formData, "id"), }); revalidatePath("/admin/radio/banners"); } function rankInput(formData: FormData) { return { name: text(formData, "name"), description: text(formData, "description") || undefined, badgeCode: text(formData, "badgeCode") || undefined, isActive: enabled(formData, "isActive"), }; } export async function createRadioRank(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation( staff, "radio.rank.create", rankInput(formData), ); revalidatePath("/admin/radio/ranks"); } export async function updateRadioRank(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation(staff, "radio.rank.update", { id: text(formData, "id"), ...rankInput(formData), }); revalidatePath("/admin/radio/ranks"); } export async function deleteRadioRank(formData: FormData): Promise { const staff = await actor(); await executeLegacyHotelMutation(staff, "radio.rank.delete", { id: text(formData, "id"), }); revalidatePath("/admin/radio/ranks"); }