import { StorageKey } from '@/constants' import { isImwaldElectron, isMobileBrowserProfile } from '@/lib/client-platform' /** Removed from settings; strip so manual `localStorage` edits cannot flip archive behavior. */ const LEGACY_EVENT_ARCHIVE_ENABLED_KEY = 'eventArchiveEnabled' let legacyEventArchiveEnabledKeyRemoved = false /** Platform defaults (overridable in Cache settings). */ export const EVENT_ARCHIVE_DEFAULTS = { sessionLruMobile: 100, sessionLruDesktopBrowser: 2500, sessionLruElectron: 5000, maxMbMobile: 48, maxMbElectron: 512, maxMbDesktopBrowser: 2048, maxEventsMobile: 500, maxEventsElectron: 400_000, maxEventsDesktopBrowser: 80_000 } as const export type TEventArchiveConfig = { /** Soft byte budget (approximate, from JSON size). */ maxBytes: number maxEvents: number sessionLruMax: number } function readPositiveInt(key: string, fallback: number): number { try { const v = window.localStorage.getItem(key) if (v === null || v === '' || v === '0') return fallback const n = Number.parseInt(v, 10) return Number.isFinite(n) && n > 0 ? n : fallback } catch { return fallback } } function defaultSessionLruMax(): number { if (isImwaldElectron()) return EVENT_ARCHIVE_DEFAULTS.sessionLruElectron if (isMobileBrowserProfile()) return EVENT_ARCHIVE_DEFAULTS.sessionLruMobile return EVENT_ARCHIVE_DEFAULTS.sessionLruDesktopBrowser } function defaultMaxMb(): number { if (isImwaldElectron()) return EVENT_ARCHIVE_DEFAULTS.maxMbElectron if (isMobileBrowserProfile()) return EVENT_ARCHIVE_DEFAULTS.maxMbMobile return EVENT_ARCHIVE_DEFAULTS.maxMbDesktopBrowser } function defaultMaxEvents(): number { if (isImwaldElectron()) return EVENT_ARCHIVE_DEFAULTS.maxEventsElectron if (isMobileBrowserProfile()) return EVENT_ARCHIVE_DEFAULTS.maxEventsMobile return EVENT_ARCHIVE_DEFAULTS.maxEventsDesktopBrowser } /** * Effective archive + session LRU limits (reads Cache settings from localStorage). * Disk archive is always on; only caps are configurable. */ export function getEventArchiveConfig(): TEventArchiveConfig { if (typeof window !== 'undefined' && !legacyEventArchiveEnabledKeyRemoved) { legacyEventArchiveEnabledKeyRemoved = true try { window.localStorage.removeItem(LEGACY_EVENT_ARCHIVE_ENABLED_KEY) } catch { // ignore } } const maxMb = readPositiveInt(StorageKey.EVENT_ARCHIVE_MAX_MB, defaultMaxMb()) const maxEvents = readPositiveInt(StorageKey.EVENT_ARCHIVE_MAX_EVENTS, defaultMaxEvents()) const sessionLruMax = readPositiveInt(StorageKey.SESSION_EVENT_LRU_MAX, defaultSessionLruMax()) return { maxBytes: Math.max(8, maxMb) * 1024 * 1024, maxEvents: Math.max(50, maxEvents), sessionLruMax: Math.max(32, Math.min(200_000, sessionLruMax)) } } /** Session LRU max before localStorage overrides (for EventService constructor). */ export function getDefaultSessionLruMaxSync(): number { return readPositiveInt(StorageKey.SESSION_EVENT_LRU_MAX, defaultSessionLruMax()) }