import type { BuiltinField } from '@/lib/contentTypes' export const COLUMN_CAP = 6 export const DEFAULT_COLUMN_COUNT = 4 const STORAGE_PREFIX = 'renewcms-content-columns-' export function columnsStorageKey(typeKey: string) { return `${STORAGE_PREFIX}${typeKey}` } export function defaultColumnKeys(fields: BuiltinField[]) { return fields.slice(0, DEFAULT_COLUMN_COUNT).map((field) => field.key) } export function resolveColumnKeys(fields: BuiltinField[], stored: unknown) { if (!Array.isArray(stored)) { return defaultColumnKeys(fields) } const wanted = new Set(stored.filter((key): key is string => typeof key === 'string')) const kept = fields .map((field) => field.key) .filter((key) => wanted.has(key)) .slice(0, COLUMN_CAP) return kept.length > 0 ? kept : defaultColumnKeys(fields) } export function readStoredColumns(typeKey: string): unknown { try { const raw = localStorage.getItem(columnsStorageKey(typeKey)) return raw === null ? null : JSON.parse(raw) } catch { return null } } export function storeColumns(typeKey: string, keys: string[]) { try { localStorage.setItem(columnsStorageKey(typeKey), JSON.stringify(keys)) } catch { return } } export function clearStoredColumns(typeKey: string) { try { localStorage.removeItem(columnsStorageKey(typeKey)) } catch { return } } export function toggleColumnKeys( fields: BuiltinField[], current: string[], key: string, on: boolean, ) { const wanted = new Set(current) if (on) { if (wanted.size >= COLUMN_CAP) { return current } wanted.add(key) } else if (wanted.size > 1) { wanted.delete(key) } return fields.map((field) => field.key).filter((fieldKey) => wanted.has(fieldKey)) }