import { createIndexedDBHelper, type IndexedDBHelper } from './helpers/indexedDBHelper' import type { ArticleFilters } from '@/components/ArticleFilters' const DB_NAME = 'nostr_paywall_settings' const DB_VERSION = 3 const STORE_NAME = 'filter_preferences' export interface FilterPreferencesItem { key: 'filters' value: ArticleFilters timestamp: number } const FILTERS_KEY = 'filters' class FilterPreferencesService { private readonly dbHelper: IndexedDBHelper constructor() { this.dbHelper = createIndexedDBHelper({ dbName: DB_NAME, version: DB_VERSION, storeName: STORE_NAME, keyPath: 'key', indexes: [{ name: 'timestamp', keyPath: 'timestamp', unique: false }], }) } async saveFilters(filters: ArticleFilters): Promise { try { const item: FilterPreferencesItem = { key: FILTERS_KEY, value: filters, timestamp: Date.now(), } await this.dbHelper.put(item) } catch (error) { console.error('Error saving filter preferences:', error) } } async getFilters(): Promise { try { const item = await this.dbHelper.get(FILTERS_KEY) if (item?.value) { return item.value } return null } catch (error) { console.error('Error getting filter preferences:', error) return null } } async clearFilters(): Promise { try { await this.dbHelper.delete(FILTERS_KEY) } catch (error) { console.error('Error clearing filter preferences:', error) throw error } } } const filterPreferencesService = new FilterPreferencesService() export async function saveFilterPreferences(filters: ArticleFilters): Promise { return filterPreferencesService.saveFilters(filters) } export async function getFilterPreferences(): Promise { return filterPreferencesService.getFilters() } export async function clearFilterPreferences(): Promise { return filterPreferencesService.clearFilters() }