import type { UserProfile } from "@/types/api"; import AsyncStorage from "@react-native-async-storage/async-storage"; const STORAGE_KEYS = { ACCESS_TOKEN: "access_token", REFRESH_TOKEN: "refresh_token", USER: "user", ODDS_SETTINGS: "odds_settings", CARDS_SETTINGS: "cards_settings", }; export interface OddsSettings { enabled: boolean; selectedBookmakers: string[]; } export interface CardsSettings { enabled: boolean; } export const storage = { async setAccessToken(token: string): Promise { await AsyncStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, token); }, async getAccessToken(): Promise { return await AsyncStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN); }, async setRefreshToken(token: string): Promise { await AsyncStorage.setItem(STORAGE_KEYS.REFRESH_TOKEN, token); }, async getRefreshToken(): Promise { return await AsyncStorage.getItem(STORAGE_KEYS.REFRESH_TOKEN); }, async setUser(user: UserProfile): Promise { await AsyncStorage.setItem(STORAGE_KEYS.USER, JSON.stringify(user)); }, async getUser(): Promise { const userStr = await AsyncStorage.getItem(STORAGE_KEYS.USER); if (!userStr) return null; try { return JSON.parse(userStr) as UserProfile; } catch { return null; } }, async setOddsSettings(settings: OddsSettings): Promise { await AsyncStorage.setItem( STORAGE_KEYS.ODDS_SETTINGS, JSON.stringify(settings), ); }, async getOddsSettings(): Promise { const settingsStr = await AsyncStorage.getItem(STORAGE_KEYS.ODDS_SETTINGS); if (!settingsStr) return { enabled: false, selectedBookmakers: [] }; try { return JSON.parse(settingsStr) as OddsSettings; } catch { return { enabled: false, selectedBookmakers: [] }; } }, async setCardsSettings(settings: CardsSettings): Promise { await AsyncStorage.setItem( STORAGE_KEYS.CARDS_SETTINGS, JSON.stringify(settings), ); }, async getCardsSettings(): Promise { const settingsStr = await AsyncStorage.getItem(STORAGE_KEYS.CARDS_SETTINGS); if (!settingsStr) return { enabled: false }; try { return JSON.parse(settingsStr) as CardsSettings; } catch { return { enabled: false }; } }, async clear(): Promise { await AsyncStorage.multiRemove([ STORAGE_KEYS.ACCESS_TOKEN, STORAGE_KEYS.REFRESH_TOKEN, STORAGE_KEYS.USER, STORAGE_KEYS.ODDS_SETTINGS, STORAGE_KEYS.CARDS_SETTINGS, ]); }, };