package com.develop.food.base.utils

import java.util.*

abstract class TimeDownUtil {
    private var mCountDownInterval: Long = 1000
    private var mTimer: Timer? = null
    private var mTimerTask: TimerTask? = null

    /**
     * 时钟回调的次数
     */
    private var mCount = 0

    /**
     * 倒计时时间，默认间隔单位为秒
     *
     * @param time 毫秒
     */
    constructor(time: Long) {
        initTimer(time)
    }

    private fun initTimer(time: Long) {
        mTimer = Timer()
        mCount = (time / mCountDownInterval).toInt()
        mTimerTask = object : TimerTask() {
            override fun run() {
                if (mCount > 0) {
                    mCount--
                    onTick(mCountDownInterval * mCount)
                } else {
                    onFinish()
                    cancel()
                }
            }
        }
    }

    /**
     * 倒计时时间，默认单位为秒
     *
     * @param time
     * @param countDownInterval 间隔时间,1000为1s
     */
    constructor(time: Long, countDownInterval: Long) {
        mCountDownInterval = countDownInterval
        initTimer(time)
    }

    fun start() {
        mTimer?.schedule(mTimerTask, 0, mCountDownInterval)
    }

    /**
     * Callback fired on regular interval.
     *
     * @param millisUntilFinished 距离结束还有多少时间
     */
    abstract fun onTick(millisUntilFinished: Long)

    /**
     * 倒计时结束的回调
     */
    abstract fun onFinish()
    fun cancel() {
        mTimer?.cancel()
        mTimerTask?.cancel()
    }
}