import Foundation import Observation @Observable @MainActor final class WatchCardStore { private static let defaultCardIDKey = "WatchDefaultCardID" private(set) var cards: [WatchCard] = [] var defaultCardID: UUID? { didSet { persistDefaultID() } } init() { loadDefaultID() WatchDesign.debugLog("WatchCardStore: Initialized, waiting for cards from iPhone") } var defaultCard: WatchCard? { guard let defaultCardID else { return cards.first(where: { $0.isDefault }) ?? cards.first } return cards.first(where: { $0.id == defaultCardID }) ?? cards.first(where: { $0.isDefault }) ?? cards.first } /// Called by WatchConnectivityService when cards are received from iPhone func updateCards(_ newCards: [WatchCard]) { WatchDesign.debugLog("WatchCardStore: Received \(newCards.count) cards from iPhone") cards = newCards // Update default card ID if current selection is no longer valid if let currentDefault = defaultCardID, !cards.contains(where: { $0.id == currentDefault }) { defaultCardID = cards.first(where: { $0.isDefault })?.id ?? cards.first?.id } else if defaultCardID == nil { defaultCardID = cards.first(where: { $0.isDefault })?.id ?? cards.first?.id } } func setDefault(_ card: WatchCard) { defaultCardID = card.id } private func persistDefaultID() { UserDefaults.standard.set(defaultCardID?.uuidString ?? "", forKey: Self.defaultCardIDKey) } private func loadDefaultID() { let storedValue = UserDefaults.standard.string(forKey: Self.defaultCardIDKey) ?? "" if let id = UUID(uuidString: storedValue) { defaultCardID = id } } }