package com.xty.common.util

import com.xty.common.Const
import com.xty.network.model.SettingBean
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import java.util.regex.Pattern

/**
 * 通用信息封装
 */
object CommonUtils {

    fun isBlueTooth(watchType: Int): Boolean{
        return Const.Companion.WatchDevice.BlueU32.ordinal == watchType
    }

    /**
     * 获取用户蓝牙地址信息
     */
    fun getBlueToothMac(id: String = ""): String? {
        val myUserId = getMyUserId()
        if (id.isNullOrEmpty() || myUserId == id) {  //为空或者和本地保存的一致则认为是本人
            return getMyUserInfo()?.bluetooth
        } else {//这里应该要拿家人用户的蓝牙信息

        }
        return null
    }

    /**
     * 获取用户设备id
     */
    fun getDeviceId(id: String = ""): String? {
        val myUserId = getMyUserId()
        if (id.isNullOrEmpty() || myUserId == id) {  //为空或者和本地保存的一致则认为是本人
            return getMyUserInfo()?.deviceId
        } else {//这里应该要拿家人用户的蓝牙信息

        }
        return null
    }

    /**
     * 获取用户id
     */
    fun getMyUserId(): String?{
        var myUserId = ""
        getMyUserInfo()?.apply {
            myUserId = id.toString()
        }
        return  myUserId
    }

    /**
     * 获取用户管家ID
     */
    fun getMyAdminId(): String?{
        var myAdminId = ""
        getMyUserInfo()?.apply {
            myAdminId = userId.toString()
        }
        return  myAdminId
    }

    /**
     * 获取个人用户信息
     */
    fun getMyUserInfo(): SettingBean.User?{
        return getMySettingInfo()?.user
    }

    /**
     * 获取个人设置信息
     */
    fun getMySettingInfo(): SettingBean?{
        return Const.mainLiveData?.value
    }

    fun getSpaceTime(dayNum:Int) :String {
        // 获取当前时间
        val currentTime = Calendar.getInstance()

        // 计算七天前的时间
        val sevenDaysAgo = Calendar.getInstance()
        sevenDaysAgo.add(Calendar.DAY_OF_YEAR, -dayNum)

        // 定义日期格式
        val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())

        // 格式化日期为字符串
        val currentDateStr = dateFormat.format(currentTime.time)
        val sevenDaysAgoStr = dateFormat.format(sevenDaysAgo.time)


        return "${sevenDaysAgoStr}至${currentDateStr}"
    }

    fun getSpaceTimeOneDay() :String {
        // 获取当前时间
        val currentTime = Calendar.getInstance()

        // 计算七天前的时间
        val sevenDaysAgo = Calendar.getInstance()
        sevenDaysAgo.add(Calendar.DAY_OF_YEAR, -1)

        // 定义日期格式
        val dateFormat = SimpleDateFormat("MM-dd HH:mm", Locale.getDefault())

        // 格式化日期为字符串
        val currentDateStr = dateFormat.format(currentTime.time)
        val sevenDaysAgoStr = dateFormat.format(sevenDaysAgo.time)


        return "${sevenDaysAgoStr}至${currentDateStr}"
    }

    fun stringToDoubleOne(date :String):String{
        return "%.1f".format(date.toFloat())
    }

     fun replaceMiddleNumber(str:String):String{
        val middleNum = str.substring(3,7)
        val newMiddleNum = middleNum.replace(middleNum,"****")
        val replaceNum = str.substring(0,3)+newMiddleNum + str.substring(7,str.length)
        return replaceNum
    }

    /**
     * 手机号码，中间4位星号替换
     *
     * @param phone 手机号
     * @return 星号替换的手机号
     */
    fun phoneNoHide(phone: String): String {
        // 括号表示组，被替换的部分$n表示第n组的内容
        // 正则表达式中，替换字符串，括号的意思是分组，在replace()方法中，
        // 参数二中可以使用$n(n为数字)来依次引用模式串中用括号定义的字串。
        // "(\d{3})\d{4}(\d{4})", "$1****$2"的这个意思就是用括号，
        // 分为(前3个数字)中间4个数字(最后4个数字)替换为(第一组数值，保持不变$1)(中间为*)(第二组数值，保持不变$2)
        return phone.replace("(\\d{3})\\d{4}(\\d{4})".toRegex(), "$1****$2")
    }

    fun checkMobile(mobile: String): Boolean {
        val regex = "(\\+\\d+)?1[3456789]\\d{9}$"
        return Pattern.matches(regex, mobile)
    }

}