export type PhotoModerationAction = { id: string; eventSlug: string; photoId: number; action: 'approve' | 'hide' | 'show' | 'feature' | 'unfeature'; createdAt: string; }; const STORAGE_KEY = 'fotospiel-admin-photo-queue'; function buildId(): string { if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') { return crypto.randomUUID(); } return `${Date.now()}-${Math.random().toString(16).slice(2, 10)}`; } export function loadPhotoQueue(): PhotoModerationAction[] { if (typeof window === 'undefined') { return []; } try { const raw = window.localStorage.getItem(STORAGE_KEY); if (!raw) { return []; } const parsed = JSON.parse(raw); return Array.isArray(parsed) ? (parsed as PhotoModerationAction[]) : []; } catch { return []; } } export function savePhotoQueue(queue: PhotoModerationAction[]): void { if (typeof window === 'undefined') { return; } try { window.localStorage.setItem(STORAGE_KEY, JSON.stringify(queue)); } catch { // Ignore persistence failures. } } export function enqueuePhotoAction(action: Omit): PhotoModerationAction[] { const queue = loadPhotoQueue(); const entry: PhotoModerationAction = { ...action, id: buildId(), createdAt: new Date().toISOString(), }; const next = [...queue, entry]; savePhotoQueue(next); return next; } export function removePhotoAction(queue: PhotoModerationAction[], id: string): PhotoModerationAction[] { const next = queue.filter((item) => item.id !== id); savePhotoQueue(next); return next; } export function replacePhotoQueue(queue: PhotoModerationAction[]): PhotoModerationAction[] { savePhotoQueue(queue); return queue; }