import { Platform } from 'react-native'; import { deleteSecureItem, getSecureItem, setSecureItem, } from '@/core/storage/secure'; import { supportedLanguages, type AppLanguage } from '@/i18n/resources'; import { THEME_NAMES, type ThemeName } from '@/constants/theme-bridge'; const KEY_LANGUAGE = 'app_settings_language'; const KEY_LARGE_TEXT = 'app_settings_large_text'; const KEY_DARK_MODE = 'app_settings_dark_mode'; const KEY_THEME_NAME = 'app_settings_theme_name'; const webFallback: Record = {}; async function getStored(key: string): Promise { if (Platform.OS === 'web') return webFallback[key] ?? null; return getSecureItem(key); } async function setStored(key: string, value: string): Promise { if (Platform.OS === 'web') { webFallback[key] = value; return; } await setSecureItem(key, value); } async function deleteStored(key: string): Promise { if (Platform.OS === 'web') { delete webFallback[key]; return; } await deleteSecureItem(key); } export async function getAppLanguage(): Promise { const v = await getStored(KEY_LANGUAGE); if (!v) return null; return supportedLanguages.includes(v as AppLanguage) ? (v as AppLanguage) : null; } export async function setAppLanguage(lang: AppLanguage): Promise { await setStored(KEY_LANGUAGE, lang); } export async function clearAppLanguage(): Promise { await deleteStored(KEY_LANGUAGE); } export async function getLargeText(): Promise { const v = await getStored(KEY_LARGE_TEXT); if (v == null || v === '') return true; return v === 'true'; } export async function setLargeText(value: boolean): Promise { await setStored(KEY_LARGE_TEXT, value ? 'true' : 'false'); } export async function getDarkMode(): Promise { const v = await getStored(KEY_DARK_MODE); return v === 'true'; } export async function setDarkMode(value: boolean): Promise { await setStored(KEY_DARK_MODE, value ? 'true' : 'false'); } export async function getThemeName(): Promise { const v = await getStored(KEY_THEME_NAME); if (!v || !THEME_NAMES.includes(v as ThemeName)) return 'default'; return v as ThemeName; } export async function setThemeName(value: ThemeName): Promise { await setStored(KEY_THEME_NAME, value); } export { supportedLanguages, THEME_NAMES }; export type { AppLanguage, ThemeName };