//
//  ZZHHelper.swift
//  SwiftProject
//
//  Created by aaa on 2024/3/11.
//

import Foundation
import AVFoundation

import KeychainAccess
class ZZHHelper {
    
    static let KEYCHAIN_SERVICE:String = "com.nsk.tdvideo"  // 需要项目唯一性，建议使用项目的 bundleId
    static let UUID_KEY:String = "VPro_UUID_KEY"
    
    
    class func formatVideoTime(second:Int) -> String {
        let allTime: Int = second
        var hours = 0
        var minutes = 0
        var seconds = 0
        var hoursText = ""
        var minutesText = ""
        var secondsText = ""
        
        hours = allTime / 3600
        hoursText = hours > 9 ? "\(hours)" : "0\(hours)"
        
        minutes = allTime % 3600 / 60
        minutesText = minutes > 9 ? "\(minutes)" : "0\(minutes)"
        
        seconds = allTime % 3600 % 60
        secondsText = seconds > 9 ? "\(seconds)" : "0\(seconds)"
        
        if hoursText == "00" {
            return "\(minutesText):\(secondsText)"
        }else{
            return "\(hoursText):\(minutesText):\(secondsText)"
        }
    }
    
    
    
    
    //MARK: 检查是否为空间视频
    class func isSpatialVideo(asset: AVAsset)  -> Bool {
//        for track in asset.tracks {
//            if track.mediaType == .video {
//                for formatDesc in track.formatDescriptions {
//                    let dic = CMFormatDescriptionGetExtensions(formatDesc as! CMFormatDescription) as! Dictionary<String, Any>
//                    print("fromatdesc:\n\(dic)\n\n")
//                }
//            }
//        }
//        return false
        
        
        let metadata = asset.metadata(forFormat: AVMetadataFormat.quickTimeMetadata)
        let isSpatialVideo = metadata.contains { item in
            print("item:\n\(item) \n\n\n")
            if let identifier = item.identifier?.rawValue {
                return (identifier == "mdta/com.apple.quicktime.spatial.format-version") || (identifier == "mdta/com.apple.quicktime.spatial-overcapture.quality-scoring-version")
            }
            return false
        }
        return isSpatialVideo
        
    }
    
    //设置曝光时间
    class func setNowTimeToUserDefaultWithKey(_ key:String) {
        UserDefaults.standard.setValue(Date.now, forKey: key)
        UserDefaults.standard.synchronize()
    }
    
    //主要用于统计曝光时间
    class func getSecFromUserDefaultByKey(_ key:String)->TimeInterval {
        var sec:TimeInterval = 0
        let date = UserDefaults.standard.value(forKey: key)
        if let d = date as? Date{
             sec = DateInterval.init(start: d, end: Date.now).duration
        }
        return sec
    }
    
    class func getVersion()->String {
        var verStr = "version"
        if let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
            verStr = "version \(appVersion)"
        } else {
        }
        return verStr
    }
    
    class func getUUID() -> String{
        let keychain = Keychain(service: ZZHHelper.KEYCHAIN_SERVICE)
            var uuid:String = ""
            do {
                uuid = try keychain.get(ZZHHelper.UUID_KEY) ?? ""
            }
            catch let error {
                print(error)
            }
            print("拉取的设备： \(uuid)")
            if uuid.isEmpty {
                uuid = UUID().uuidString
                do {
                    try keychain.set(uuid, key: ZZHHelper.UUID_KEY)
                }
                catch let error {
                    print(error)
                    uuid = ""
                }
            }
            return uuid
    }
    
    class func getCurrentLanguage() -> String {
        // 返回设备曾使用过的语言列表
        let languages: [String] = UserDefaults.standard.object(forKey: "AppleLanguages") as! [String]
        // 当前使用的语言排在第一
        if let currentLanguage = languages.first {
            let firstStr = currentLanguage.components(separatedBy: "-").first
            return firstStr ?? "Unknown"
        }
        else {
            return "Unknown"
        }

    }
    
    /// 获取系统当前地区 en_CN/en_GB
    class func getCurrentRegion() -> String {
        let lastStr = NSLocale.current.identifier.components(separatedBy: "_").last
        return lastStr ?? "Unknown"
    }
    
    //判断是否为用户首次启动
    class func checkAppIsFirstlanuch()->Bool {
        let firstLanuch = UserDefaults.standard.bool(forKey: "kisNotUserFirstLanuchKey")
        UserDefaults.standard.setValue(true, forKey: "kisNotUserFirstLanuchKey")
        UserDefaults.standard.synchronize()
        return !firstLanuch
    }

    
}



public extension UIDevice {

   var phoneModel: 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)))
       }
       
       switch identifier {
       case "iPod5,1":                                 return "iPod Touch 5"
       case "iPod7,1":                                 return "iPod Touch 6"
       case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
       case "iPhone4,1":                               return "iPhone 4s"
       case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
       case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
       case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
       case "iPhone7,2":                               return "iPhone 6"
       case "iPhone7,1":                               return "iPhone 6 Plus"
       case "iPhone8,1":                               return "iPhone 6s"
       case "iPhone8,2":                               return "iPhone 6s Plus"
       case "iPhone8,4":                               return "iPhone SE (1st generation)"
       case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
       case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
       case "iPhone10,1", "iPhone10,4":                return "iPhone 8"
       case "iPhone10,5", "iPhone10,2":                return "iPhone 8 Plus"
       case "iPhone10,3", "iPhone10,6":                return "iPhone X"
       case "iPhone11,2":                              return "iPhone XS"
       case "iPhone11,4", "iPhone11,6":                return "iPhone XS MAX"
       case "iPhone11,8":                              return "iPhone XR"
       case "iPhone12,1":                              return "iPhone 11"
       case "iPhone12,3":                              return "iPhone 11 pro"
       case "iPhone12,5":                              return "iPhone 11 Pro Max"
       case "iPhone12,8":                              return "iPhone SE (2nd generation)"
       case "iPhone13,1":                              return "iPhone 12 mini"
       case "iPhone13,2":                              return "iPhone 12"
       case "iPhone13,3":                              return "iPhone 12 Pro"
       case "iPhone13,4":                              return "iPhone 12 Pro Max"
       case "iPhone14,4":                              return "iPhone 13 mini"
       case "iPhone14,5":                              return "iPhone 13"
       case "iPhone14,2":                              return "iPhone 13 Pro"
       case "iPhone14,3":                              return "iPhone 13 Pro Max"
       case "iPhone14,6":                              return "iPhone SE (3rd generation)"
       case "iPhone14,7":                              return "iPhone 14"
       case "iPhone14,8":                              return "iPhone 14 Plus"
       case "iPhone15,2":                              return "iPhone 14 Pro"
       case "iPhone15,3":                              return "iPhone 14 Pro Max"
       case "iPhone15,4":                              return "iPhone 15"
       case "iPhone15,5":                              return "iPhone 15 Plus"
       case "iPhone16,1":                              return "iPhone 15 Pro"
       case "iPhone16,2":                              return "iPhone 15 Pro Max"
           
           
       case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
       case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
       case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
       case "iPad6,11", "iPad6,12":                    return "iPad 5"
       case "iPad7,5", "iPad7,6":                      return "iPad 6"
       case "iPad7,11", "iPad7,12":                    return "iPad 7"
       case "iPad11,6", "iPad11,7":                    return "iPad 8"
       case "iPad12,1", "iPad12,2":                    return "iPad 9"

       case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
       case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
       case "iPad11,3", "iPad11,4":                    return "iPad Air 3"
       case "iPad13,1", "iPad13,2":                    return "iPad Air 4"
       case "iPad13,16", "iPad13,17":                  return "iPad Air 5"
       
       case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
       case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
       case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
       case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
       case "iPad11,1", "iPad11,2":                    return "iPad Mini 5"
       case "iPad14,1", "iPad14,2":                    return "iPad Mini 6"
       case "iPad6,7", "iPad6,8", "iPad6,3", "iPad6,4", "iPad7,1", "iPad7,2", "iPad7,3", "iPad7,4", "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4", "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8", "iPad8,9", "iPad8,10", "iPad8,11", "iPad8,12":         return "iPad Pro"
       case "AppleTV5,3":                              return "Apple TV"
       case "i386", "x86_64":                          return "Simulator"
       default:                                        return identifier
       }
   }
   
}
