import Foundation
import KeychainAccess

struct KeychainModel {
    static var shared = Self()

    var keychain = Keychain(service: "stream.yattee.app")

    func updateAccountKey(_ account: Account, _ key: String, _ value: String) {
        DispatchQueue.global(qos: .background).async {
            keychain[accountKey(account, key)] = value
        }
    }

    func getAccountKey(_ account: Account, _ key: String) -> String? {
        keychain[accountKey(account, key)]
    }

    func accountKey(_ account: Account, _ key: String) -> String {
        "\(account.id)-\(key)"
    }

    func removeAccountKeys(_ account: Account) {
        DispatchQueue.global(qos: .background).async {
            try? keychain.remove(accountKey(account, "token"))
            try? keychain.remove(accountKey(account, "username"))
            try? keychain.remove(accountKey(account, "password"))
        }
    }
}