package com.quyunshuo.androidbaseframemvvm.common.util

import android.util.Log
import com.quyunshuo.androidbaseframemvvm.base.BaseApplication
import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
import com.quyunshuo.androidbaseframemvvm.common.bean.LocalAlarmClockBean
import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
import com.quyunshuo.androidbaseframemvvm.common.enums.WeekEnum
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.Calendar

object AlarmSettingUtil {

    fun setAlarmClock(list: ArrayList<LocalAlarmClockBean>?) {
        //没开，就没有必要执行了。
        if (!SpUtils.getBoolean(MMKVName.ALARMCLOCK_TYPE,false)!!){
            XLogUtil.d("没有必要执行。")
            return
        }
        /**
         * 1. 用户点击添加的时候，那么我就开始设置闹钟。
         * 2. 用户点击修改的时候，那么我就开始设置闹钟。
         * 3. id作为这个序号。需要乘以10
         * 4. 增加一个选项，是否开启本地闹钟，如果开启，则使用，不开启则不管。
         */
        for (clockBean in list!!) {

            //如果状态是关闭的则不要设置闹钟。
            if (!clockBean.status!!) {
                continue
            }
            val number: Int = Integer.valueOf(clockBean.id) * 10
            try {
                setAlarmClock(number, clockBean, clockBean.type?.code+"", number + 7)
            } catch (e: ParseException) {
                throw RuntimeException(e)
            }
        }
    }

    @Throws(ParseException::class)
    fun setAlarmClock(
        number: Int,
        alarmClockBean: LocalAlarmClockBean,
        type: String,
        alarmNumber: Int,
    ): Int {
        var number = number
//        if (!alarmclockType) {
//            XLogUtil.d(
//                "setAlarmClock: 不设置闹钟"
//            )
//            return 0
//        }
        for (i in number until alarmNumber) { //清除所有的闹钟
            Log.d("backinfo","关闭了那个闹钟："+i)
            AlarmManagerUtil.cancelAlarm(
                BaseApplication.context,
                AlarmManagerUtil.ALARM_ACTION,
                i
            )
        }
        val week: java.util.ArrayList<WeekEnum> = alarmClockBean.week!!

        var hour: String = ""
        var minute: String = ""
        var msg = ""
        if ("1" == type) { //只有关机的才需要。
            if (Integer.valueOf(alarmClockBean.minute) < 5) { //如果小于5，我们需要做好计算才行。00：00：00
                //小于5，则
                //  alarmClockBean.hour-1：
                //  alarmClockBean.minute：4-5=-1,60-1=59,是正确的。
                if (Integer.valueOf(alarmClockBean.hour) < 1) {
                    hour = (Integer.valueOf(alarmClockBean.hour) - 1 + 24).toString() + ""
                } else {
                    hour = (Integer.valueOf(alarmClockBean.hour) - 1).toString() + ""
                }
                minute = (Integer.valueOf(alarmClockBean.minute) - 5 + 60).toString() + ""
            } else {
                hour = alarmClockBean.hour!!
                minute = (Integer.valueOf(alarmClockBean.minute) - 5).toString() + ""
            }
            val now = Calendar.getInstance()
            val sdf = SimpleDateFormat("HH:mm:ss")
            //设置时间
            val date1 = sdf.parse(
                (alarmClockBean.hour + ":" +
                        alarmClockBean.minute).toString() + ":" +
                        "00"
            )
            //当前时间
            val date2 = sdf.parse(
                (now[Calendar.HOUR_OF_DAY].toString() + ":" +
                        now[Calendar.MINUTE] + ":" +
                        now[Calendar.SECOND])
            )

            if (date1.compareTo(date2) > 0) {
                val nowDate = date1.time //当前时间
                val startDateTime = date2.time //真实时间
                val diffSeconds = ((nowDate - startDateTime) / 1000).toInt()
                if (diffSeconds >= 360) {
                    alarmClockBean.hour = hour
                    alarmClockBean.minute = minute
                    msg = "show"
                } else {
                    //不弹窗
                }
            } else { //过了
                println("程序怎么会运行到这里?正常应该不会")
            }
        }

        //时间。
        for (i in week.indices) {
            AlarmManagerUtil.setAlarm(
                BaseApplication.context,
                2,
                Integer.valueOf(alarmClockBean.hour),
                Integer.valueOf(alarmClockBean.minute), 0,
                Integer.valueOf(alarmClockBean.id) * 10 + i,
                week[i].code,
                type + msg
            )
        }
        number = number + week.size //累积。
        return number
    }
}