WatchUserinfoManager.swift 2.65 KB
//
//  WatchUserinfoManager.swift
//  hippo-watch Watch App
//
//  Created by shihao on 2025/7/8.
//

import Foundation
import Combine

class WatchUserinfoManager: ObservableObject {
    static let share = WatchUserinfoManager()
    var token: String? {
        didSet {
            UserDefaults.standard.set(token, forKey: "access_token")
            UserDefaults.standard.synchronize()
        }
    }
    @Published var myUserinfo: UserInfo? {
        didSet {
            UserDefaults.standard.set(myUserinfo?.toWatchMap(), forKey: "myUserinfo")
            UserDefaults.standard.synchronize()
            self.saveMyUserCharacter(myUserinfo?.persona?.rawValue ?? 0)
        }
    }
    @Published var otherUserinfo: UserInfo? {
        didSet {
            UserDefaults.standard.set(otherUserinfo?.toWatchMap(), forKey: "otherUserinfo")
            UserDefaults.standard.synchronize()
        }
    }
    @Published var interactionActionType: InteractionActionType {
        didSet {
            UserDefaults.standard.set(interactionActionType.rawValue.string, forKey: "interactionActionType")
            UserDefaults.standard.synchronize()
        }
    }
    var isMeVip: Bool? {
        didSet {
            UserDefaults.standard.set(token, forKey: "isMeVip")
            UserDefaults.standard.synchronize()
        }
    }
    
    
    init() {
        let token = UserDefaults.standard.string(forKey: "access_token")
        if let token {
            self.token = token
        }
        
        if let myUserinfo = UserDefaults.standard.dictionary(forKey: "myUserinfo"),
           let data = try? JSONSerialization.data(withJSONObject: myUserinfo),
           let myUserinfo = try? JSONDecoder().decode(UserInfo.self, from: data) {
            self.myUserinfo = myUserinfo
        }
        
        if let otherUserinfo = UserDefaults.standard.dictionary(forKey: "otherUserinfo"),
           let data = try? JSONSerialization.data(withJSONObject: otherUserinfo),
           let otherUserinfo = try? JSONDecoder().decode(UserInfo.self, from: data) {
            self.otherUserinfo = otherUserinfo
        }
        
        let interactionActionTypeString = UserDefaults.standard.string(forKey: "interactionActionType")
        if let interactionActionType = interactionActionTypeString?.int {
            self.interactionActionType = InteractionActionType(rawValue: interactionActionType) ?? .stick
        }else {
            self.interactionActionType = .stick
        }
    }
    
    private func saveMyUserCharacter(_ character: Int) {
        let defaults = UserDefaults(suiteName: "group.com.luiz.doublefeel.watchkitapp")
        defaults?.set(character, forKey: "myUserCharacter")
    }
}