//
//  GuestUserInfoRemoteAPI.swift
//  PaiaiDataKit
//
//  Created by ffib on 2018/12/26.
//  Copyright © 2018 yb. All rights reserved.
//

import Foundation
import RxSwift

struct GuestUserInfoRemoteAPI: UserInfoRemoteAPI {
    
    typealias Model = UserInfo
    
    var path: Interfaces { return .guestLogin }
    var parameter: Parameter = [:]
    
    init() {
        parameter = ["uuid": getUUID()]
    }
    
    func login() -> Single<UserInfo> {
        return Single.create(subscribe: { (observer) in
            observer(.success(UserInfo(json: ["user_id": "fiDz2Ms" as AnyObject, "userName": "郑剑飞" as AnyObject, "photoPath": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJibSYLgvXpMakvD9FaCqfiaWqcMiaiaz905YxWPuO4hy8F2lGheV7kVr9vKKXFgmL1S5s4QJgxwuwtVw/132" as AnyObject])))
            return Disposables.create()
        })
    }
    
    func getUUID() -> String {
        let keyChainDic = NSMutableDictionary()
        keyChainDic.setObject(String(kSecClassGenericPassword), forKey: kSecClass as! NSCopying)
        keyChainDic.setObject("uuid", forKey: kSecAttrAccount as! NSCopying)
        keyChainDic.setObject(kCFBooleanTrue, forKey: kSecReturnAttributes as! NSCopying)
        keyChainDic.setObject(kCFBooleanTrue, forKey: kSecReturnData as! NSCopying)
        
        var result: AnyObject?
        var uuid: String? = nil
        SecItemCopyMatching(keyChainDic, &result)
        if let resultDic = result as? NSDictionary {
            if let data = resultDic.object(forKey: kSecValueData) as? Data {
                uuid = NSString(data: data, encoding: String.Encoding.ascii.rawValue) as String?
            }
        }
        
        if let uuid = uuid { return uuid }
        let uuidStr = UUID().uuidString
        let data = uuidStr.data(using: .ascii)
        keyChainDic.setObject(data!, forKey: kSecValueData as! NSCopying)
        SecItemAdd(keyChainDic, nil)
        return uuidStr
    }
}

//extension GuestUserInfoRemoteAPI {
//    func parse(_ json: JSON) -> UserInfo? {
//        guard let result = json["data"] as? [String: AnyObject] else { return nil }
//        return UserInfo(json: result)
//    }
//
//}