package com.example.casera.cache import com.example.casera.data.DataManager import com.example.casera.models.FeatureBenefit import com.example.casera.models.Promotion import com.example.casera.models.SubscriptionStatus import com.example.casera.models.UpgradeTriggerData /** * Thin facade over DataManager for subscription data. * * All state is delegated to DataManager (single source of truth). * This object exists for backwards compatibility with callers that * read subscription state (e.g. iOS SubscriptionCacheWrapper polling via Kotlin interop). * * For Compose UI code, prefer using DataManager StateFlows directly with collectAsState(). */ object SubscriptionCache { /** * Current subscription status, delegated to DataManager. * For Compose callers, prefer: `val subscription by DataManager.subscription.collectAsState()` */ val currentSubscription: SubscriptionCacheAccessor get() = SubscriptionCacheAccessor { DataManager.subscription.value } val upgradeTriggers: SubscriptionCacheAccessor> get() = SubscriptionCacheAccessor { DataManager.upgradeTriggers.value } val featureBenefits: SubscriptionCacheAccessor> get() = SubscriptionCacheAccessor { DataManager.featureBenefits.value } val promotions: SubscriptionCacheAccessor> get() = SubscriptionCacheAccessor { DataManager.promotions.value } fun updateSubscriptionStatus(subscription: SubscriptionStatus) { DataManager.setSubscription(subscription) } fun updateUpgradeTriggers(triggers: Map) { DataManager.setUpgradeTriggers(triggers) } fun updateFeatureBenefits(benefits: List) { DataManager.setFeatureBenefits(benefits) } fun updatePromotions(promos: List) { DataManager.setPromotions(promos) } fun clear() { DataManager.setSubscription(null) DataManager.setUpgradeTriggers(emptyMap()) DataManager.setFeatureBenefits(emptyList()) DataManager.setPromotions(emptyList()) } } /** * Simple accessor that provides .value to read from DataManager. * This preserves the `SubscriptionCache.currentSubscription.value` call pattern * used by existing callers (Kotlin code and iOS interop polling). */ class SubscriptionCacheAccessor(private val getter: () -> T) { val value: T get() = getter() }