87 lines
2.8 KiB
Swift
87 lines
2.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")
|
|
|
|
// 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
|
|
}
|
|
}
|
|
}
|