package com.cake.draw.painting.environment.hy

import android.os.Handler
import android.os.Looper
import android.util.Log

object TimeoutManager {
    private val handler = Handler(Looper.getMainLooper())  // 主线程 Handler
    private val timeoutTasks = mutableMapOf<String, Runnable>()  // 存储超时任务

    // 统一管理超时任务的超时时间
    private val TIMEOUTS = mapOf(
        TimeoutTask.SHOW_AD.key to 30_000L,
        TimeoutTask.CLICK_AD.key to 30_000L,
        TimeoutTask.OVERALL_PROCESS.key to 100_000L,
        TimeoutTask.CLEAR_OPEN_APPS.key to 15_000L,
        TimeoutTask.CLOSE_AD.key to 10_000L,
        TimeoutTask.PARAM_CHANGE.key to 100_000L,
        TimeoutTask.CLICK_COMPLETE_TO_MAIN.key to 5_000L,
    )

    /**
     * 启动超时检测
     * @param task 任务标识（使用 `TimeoutTask`）
     * @param onTimeout 超时后执行的操作
     */
    fun startTimeout(task: TimeoutTask, onTimeout: () -> Unit) {
        val timeoutMillis = TIMEOUTS[task.key] ?: return  // **如果任务不存在，直接 return**
        cancelTimeout(task)  // **先取消已有的超时任务**

        val timeoutRunnable = Runnable {
            Log.d("ocean-brush", "⚠️ 任务 [${task.key}] 超时，执行 onTimeout()")
            onTimeout()
        }

        timeoutTasks[task.key] = timeoutRunnable
        handler.postDelayed(timeoutRunnable, timeoutMillis)

        Log.d("ocean-brush", "✅ 超时检测 [${task.key}] 已启动，超时时间 ${timeoutMillis / 1000} 秒")
    }

    /**
     * 取消超时检测
     * @param task 任务标识（使用 `TimeoutTask`）
     */
    fun cancelTimeout(task: TimeoutTask) {
        timeoutTasks[task.key]?.let {
            handler.removeCallbacks(it)
            timeoutTasks.remove(task.key)
            Log.d("ocean-brush", "🛑 超时检测 [${task.key}] 已取消")
        }
    }

    /**
     * 取消所有超时任务
     */
    fun cancelAll() {
        timeoutTasks.values.forEach { handler.removeCallbacks(it) }
        timeoutTasks.clear()
        Log.d("ocean-brush", "🛑 所有超时检测已取消")
    }
}