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") // Set up callback for when cards are received from iPhone WatchConnectivityService.shared.onCardsReceived = { [weak self] cards in self?.updateCards(cards) } #if targetEnvironment(simulator) // Load sample data on simulator since WatchConnectivity often doesn't work if cards.isEmpty { loadSimulatorSampleData() } #endif } #if targetEnvironment(simulator) private func loadSimulatorSampleData() { WatchDesign.debugLog("WatchCardStore: Loading simulator sample data") cards = [ WatchCard( id: UUID(), displayName: "Test User", role: "iOS Developer", company: "Sample Corp", email: "test@example.com", phone: "+1 555-0123", website: "example.com", location: "San Francisco, CA", isDefault: true, qrCodeImageData: nil ) ] defaultCardID = cards.first?.id } #endif 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 } } }