//
//  Define.swift
//  GeLiLaiGeWan
//
//  Created by geli on 2018/6/22.
//  Copyright © 2018年 geli. All rights reserved.
//

/*
 来个碗Apple开发者账号、密码:
 dev@laigewan.com
 81338860^geLi
 下载链接:
 https://itunes.apple.com/cn/app/id1428195489?mt=8
 */

import UIKit
import SwiftDate //日期处理库
import SwiftyJSON

//版本号
let systemVersion = (UIDevice.current.systemVersion as String)

//let UserId = ((UserDefaults.standard.string(forKey: "user_id") != nil) ? (UserDefaults.standard.string(forKey: "user_id")) : "") as! String

//let IsHavUserId = (UserId.count != 0)

//接口地址
//test
let SERVERCE_ImageHost = "https://z.gelifood.com/"
let SERVERCE_HOST = "https://z.gelifood.com/admin/"
//let SERVERCE_ImageHost = "https://zx.gelifood.com/"
//let SERVERCE_HOST = "https://zx.gelifood.com/admin/"
////online

//视图常量
let IS_IPHONE_X = __CGSizeEqualToSize(CGSize(width: 375.0, height: 812.0),UIScreen.main.bounds.size ) || __CGSizeEqualToSize(CGSize(width: 812.0, height: 375.0),UIScreen.main.bounds.size)||__CGSizeEqualToSize(CGSize(width: 414.0, height: 896.0),UIScreen.main.bounds.size ) || __CGSizeEqualToSize(CGSize(width: 896.0, height: 414.0),UIScreen.main.bounds.size)

let glscale = UIScreen.main.bounds.size.width/375

let fullScreenWidth = UIScreen.main.bounds.width //屏幕高度

let fullScreenHeight = UIScreen.main.bounds.height //屏幕宽度

let NavHeight = (IS_IPHONE_X ? 88 : 64)

let TabHeight = (IS_IPHONE_X ? 83 : 49)

let NavCGRect = CGRect(x: 0, y: 0, width: Int(UIScreen.main.bounds.size.width), height: NavHeight)

let LoopHeight =  UIScreen.main.bounds.size.width / 1.25

func SetTopFrameView(view:UIView,btmView:UIView){
    view.snp.makeConstraints { (make) in
        make.top.equalTo(NavCGRect.height)
        make.right.left.equalTo(0)
        make.bottom.equalTo(btmView.snp_top)
    }
}
func SetTopFrame(view:UIView,height:CGFloat){
    view.snp.makeConstraints { (make) in
        make.top.equalTo(NavCGRect.height)
        make.right.left.equalTo(0)
        make.height.equalTo(height)
    }
}
func IsOldIos() ->Bool{
    if #available(iOS 11.0, *){
        return false
    }else{
        return true
    }
}

func x(object: UIView) ->CGFloat {
    
    return object.frame.origin.x
}

func y(object: UIView) -> CGFloat {
    return object.frame.origin.y
}

func width(object: UIView) -> CGFloat {
    return object.frame.size.width
}

func height(object: UIView) -> CGFloat {
    return object.frame.size.height
}

func centerX(object: UIView) -> CGFloat {
    return object.center.x
}

func centerY(object: UIView) -> CGFloat {
    return object.center.y
}

func setFont(_ size:CGFloat) -> UIFont{
    return UIFont.boldSystemFont(ofSize: size)
}

func setColor(red:CGFloat,green:CGFloat,blue:CGFloat)->UIColor{
    
    return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1)
}

func isPurnFloat(string: String) -> Bool {
    
    let scan: Scanner = Scanner(string: string)
    
    var val:Float = 0
    
    return scan.scanFloat(&val) && scan.isAtEnd
}

func isPurnInt(string: String) -> Bool {
    
    let scan: Scanner = Scanner(string: string)
    
    var val:Int = 0
    
    return scan.scanInt(&val) && scan.isAtEnd
    
}
//MARK:--是否是正确的数值
func isPurnNumber(str:String)-> Bool{
    //    let expression = "^[0-9]*((\\.|,)[0-9]{0,2})?$"
    
    
    
    let arr = str.components(separatedBy: ",")
    if arr.count > 0 {
        var num = ""
        for item in arr{
            num += item
        }
        if num.count > 0 {
            var predicateStr:String!
            var currObject:String!
            predicateStr = "^[0-9]*((\\.|,)[0-9]{0,2})?$"
            currObject = num
            let predicate =  NSPredicate(format: "SELF MATCHES %@" ,predicateStr)
            return predicate.evaluate(with: currObject)
        }
        if isPurnInt(string: num) || isPurnFloat(string: num){
            return true
        }else{
            return false
        }
    }else{
        if str.count > 0 {
            var predicateStr:String!
            var currObject:String!
            predicateStr = "^[0-9]*((\\.|,)[0-9]{0,2})?$"
            currObject = str
            let predicate =  NSPredicate(format: "SELF MATCHES %@" ,predicateStr)
            return predicate.evaluate(with: currObject)
        }
        if isPurnInt(string: str) || isPurnFloat(string: str){
            return true
        }else{
            return false
        }
    }
}
//RGB
func RGB(r:CGFloat,g:CGFloat,b:CGFloat)->UIColor{
    return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: 1)
}
//MARK:--是否手机号码
func isTelNumber(num:NSString)->Bool
{
    var mobile = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$"
    var  CM = "^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$"
    var  CU = "^1(3[0-2]|5[256]|8[56])\\d{8}$"
    var  CT = "^1((33|53|8[09])[0-9]|349)\\d{7}$"
    var regextestmobile = NSPredicate(format: "SELF MATCHES %@",mobile)
    var regextestcm = NSPredicate(format: "SELF MATCHES %@",CM )
    var regextestcu = NSPredicate(format: "SELF MATCHES %@" ,CU)
    var regextestct = NSPredicate(format: "SELF MATCHES %@" ,CT)
    if ((regextestmobile.evaluate(with: num) == true)
        || (regextestcm.evaluate(with: num)  == true)
        || (regextestct.evaluate(with: num) == true)
        || (regextestcu.evaluate(with: num) == true))
    {
        return true
    }
    else
    {
        return false
    }
}

func stringToTimeStamp(stringTime:Int)->String {
    
    let interval = TimeInterval(stringTime)
    
    let date = NSDate(timeIntervalSince1970: interval)
    
    // 格式化输出
    let dateFormatter = DateFormatter()
    
    dateFormatter.dateFormat = " yyyy-MM-dd  HH:mm:ss"
    
    let nowDate = dateFormatter.string(from: date as Date)
    return nowDate
}
//MARK:--是否是邮箱
func isMailBox(mail_ad:String) -> Bool {
    
    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    
    let emailTest = NSPredicate.init(format: "SELF MATCHES %@", emailRegex)
    
    return emailTest.evaluate(with: mail_ad)
    
}
extension String {
    
    
    var containsEmoji: Bool {
        for scalar in unicodeScalars {
            switch scalar.value {
            case
            0x00A0...0x00AF,
            0x2030...0x204F,
            0x2120...0x213F,
            0x2190...0x21AF,
            0x2310...0x329F,
            0x1F000...0x1F9CF:
                return true
            default:
                continue
            }
        }
        return false
    }
    
    
}
extension UIViewController {
    class func currentViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return currentViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            return currentViewController(base: tab.selectedViewController)
        }
        if let presented = base?.presentedViewController {
            return currentViewController(base: presented)
        }
        return base
    }
}
//MARK:--根据开始位置和长度截取字符串
extension String {
    func subString(start:Int, length:Int = -1) -> String {
        var len = length
        if len == -1 {
            len = self.count - start
        }
        let st = self.index(startIndex, offsetBy:start)
        let en = self.index(st, offsetBy:len)
        return String(self[st ..< en])
    }
}
//MARK:--根据整数返回字符串
func StringByInt(number:Int) -> String {
    let num = NSNumber(value: number)
    let str = NumberFormatter.localizedString(from: num, number: .none)
    return str
}
//MARK: 创建一个日期格式器
func TimeByDouble (sender : Double ) -> String {
    let timeInterval:TimeInterval = TimeInterval(sender)
    let data : Date = Date(timeIntervalSince1970: timeInterval)
    let dformatter = DateFormatter()
    dformatter.dateFormat = "yyyy.MM.dd HH:mm:ss"
    return dformatter.string(from: data)
}
func dayByDouble (sender : Double ) -> String {
    let timeInterval:TimeInterval = TimeInterval(sender)
    let data : Date = Date(timeIntervalSince1970: timeInterval)
    let dformatter = DateFormatter()
    dformatter.dateFormat = "yyyy.MM.dd"
    return dformatter.string(from: data)
}
func dayAndTimeByDouble (sender : Double ) -> String {
    let timeInterval:TimeInterval = TimeInterval(sender)
    let data : Date = Date(timeIntervalSince1970: timeInterval)
    let dformatter = DateFormatter()
    dformatter.dateFormat = "yyyy.MM.dd HH:mm"
    return dformatter.string(from: data)
}
func dateConvertString(date:Date, dateFormat:String="yyyy-MM-dd") -> String {
        let timeZone = TimeZone.init(identifier: "UTC")
        let formatter = DateFormatter()
        formatter.timeZone = timeZone
//        formatter.locale = Locale.init(identifier: "zh_CN")
        formatter.dateFormat = dateFormat
        let date = formatter.string(from: date)
        return date.components(separatedBy: " ").first!
}

//MARK: -- 格式化数字
func formatShowNumber(value:String) -> String {
    if value.isEmpty {
        return "0"
    }
    
    //保留位数
    let interceptValue = String(format: "%.2f", (value as NSString).doubleValue)
    //添加分隔符
    let format = NumberFormatter()
    format.numberStyle = .decimal
    let formatValue = format.string(from: NSNumber(value: (interceptValue as NSString).doubleValue))
    return formatValue!
}
//MARK:--数组转字符串
func dataChangeString(sender:Array<Any>) -> String{
    var str = ""
    do {
        let json = JSON(sender)
        let data = try! JSONEncoder().encode(json)
        str = String(data: data, encoding: .utf8)!
        
    }catch {
        str = ""
    }
    
    return str
}
//MARK:--字符串转字典
func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{
    
    let jsonData:Data = jsonString.data(using: .utf8)!
    
    let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
    if dict != nil {
        return dict as! NSDictionary
    }
    return NSDictionary()
}
//MARK:--字符串转字典
func getDicFromJSONString(jsonString:String) ->Dictionary<String,Any>{
    
    let jsonData:Data = jsonString.data(using: .utf8)!
    
    let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
    if dict != nil {
        return dict as! Dictionary
    }
    return Dictionary()
}



//MARK: - 获取系统当前时间
func getTimeDayNow()->String{
    let date = Date()
    
    let timeFormatter = DateFormatter()
    
    timeFormatter.dateFormat = "yyyy-MM-dd"
    return timeFormatter.string(from: date) as String
}
func getTimeNow()->String{
    let date = Date()
    
    let timeFormatter = DateFormatter()
    
    timeFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    return timeFormatter.string(from: date) as String
}
//MARK:--字典转字符串
func dictChangeString(sender:Dictionary<String, Any>) -> String{
    var str = ""
    do {
        let json = JSON(sender)
        let data = try! JSONEncoder().encode(json)
        str = String(data: data, encoding: .utf8)!
        
    }catch {
        str = ""
    }
    
    return str
}

extension String{
    static let random_str_characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    static func randomStr(len : Int) -> String{
        var ranStr = ""
        for _ in 0..<len {
            let index = Int(arc4random_uniform(UInt32(random_str_characters.count)))
            ranStr.append(random_str_characters[random_str_characters.index(random_str_characters.startIndex, offsetBy: index)])
        }
        return ranStr
    }
}