BusinessCard/BusinessCardWatch Watch App/State/WatchCardStore.swift

54 lines
1.8 KiB
Swift

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
}
}
}