//
//  QSLDeviceTool.swift
//  QuickSearchLocation
//
//  Created by mac on 2024/4/10.
//

import Foundation
import UIKit
import AdSupport

/// 设备各种信息
class QSLDeviceTool: NSObject {
    
    // MARK: 1、App 名称
    /// App 名称
    var appDisplayName: String {
        return (Bundle.main.infoDictionary!["CFBundleDisplayName"] as? String) ?? ""
    }
    
    // MARK: 2、App 平台 安卓为1 iOS为2
    /// App 平台
    var platform: Int {
        return 2;
    }
    
    // MARK: 3、渠道名称
    /// 渠道名称
    var channelName: String {
        return "appstore";
    }
    
    // MARK: 4、版本
    /// 版本
    var OSVersion: String {
        return String.init(format: "%@%@", UIDevice.current.systemName, UIDevice.current.systemVersion)
    }
    
    // MARK: 5、包名
    /// 包名
    var packageName: String {
        return Bundle.appBundleIdentifier;
    }
    
    // MARK: 6、版本号 1.0.0
    /// 版本号
    var appVersionName: String {
        return Bundle.appVersion;
    }
    
    // MARK: 6、版本号 100
    /// 版本号
    var appVersionCode: String {
        let versionSubStrings = self.appDisplayName.components(separatedBy: ".")
        var versionCode = ""
        for subString in versionSubStrings {
            versionCode.append(subString)
        }
        if versionSubStrings.count < 3 {
            versionCode.append("0")
        }
        return versionCode
    }
    
    // MARK: 7、品牌
    /// 品牌
    var brand: String {
        return "Apple"
    }
    
    // MARK: 8、idfa
    /// idfa
    var idfa: String {
        return ASIdentifierManager.shared().advertisingIdentifier.uuidString;
    }
    
    // MARK: 8、idfv
    /// idfv
    var idfv: String {
        return UIDevice.current.identifierForVendor?.uuidString ?? "";
    }
    
    // MARK: 9、型号
    /// 型号
    var model: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }
        return identifier
    }
}
