package cn.hikyson.rocket.monitor;

import android.os.Handler;
import android.os.HandlerThread;
import android.os.Process;

import java.util.ArrayList;
import java.util.List;

import cn.hikyson.rocket.callback.ITimeoutHandler;
import cn.hikyson.rocket.task.LaunchTask;

/**
 * 任务监视器
 * Created by kysonchao on 2018/1/9.
 */
public class TaskDelayChecker {
    /**
     * 延时确认任务是否已经完成
     *
     * @param tasks
     * @param delayTimeMillis
     * @param iTimeoutHandler
     */
    public static void delayCheckTaskAlive(final List<LaunchTask> tasks, long delayTimeMillis, final ITimeoutHandler iTimeoutHandler) {
        if (delayTimeMillis <= 0 || iTimeoutHandler == null) {
            return;
        }
        final HandlerThread handlerThread = new HandlerThread("rocket-task-timeout-checker", Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_MORE_FAVORABLE);
        handlerThread.start();
        new Handler(handlerThread.getLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                List<LaunchTask> undoneTasks = new ArrayList<>();
                //如果当前还有任务没有完成的话,输出异常
                int size = tasks.size();
                for (int i = 0; i < size; i++) {
                    final LaunchTask task = tasks.get(i);
                    if (!task.isDone()) {
                        undoneTasks.add(task);
                    }
                }
                if (!undoneTasks.isEmpty()) {
                    iTimeoutHandler.onTimeout(undoneTasks);
                }
                handlerThread.quit();
            }
        }, delayTimeMillis);
    }
}