package com.example.sleep.utils;

import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;

import com.example.sleep.service.AliveJobService;

/**
 * JobSchedulerManager是一个帮助类，用于管理作业调度和执行相关操作。
 */
public class JobSchedulerManager {
    private static final int JOB_ID = 1; // 定义作业ID
    private static JobSchedulerManager mJobManager; // 单例模式中的实例
    private JobScheduler mJobScheduler; // 作业调度器
    private static Context mContext; // 上下文
    /**
     * 构造函数，私有化，外部无法直接实例化该类
     *
     * @param ctxt 上下文
     */
    private JobSchedulerManager(Context ctxt) {
        mContext = ctxt;
        mJobScheduler = (JobScheduler) ctxt.getSystemService(Context.JOB_SCHEDULER_SERVICE);
    }
    /**
     * 获取JobSchedulerManager的实例，采用单例模式
     *
     * @param ctxt 上下文
     * @return JobSchedulerManager的实例
     */
    public final static JobSchedulerManager getJobSchedulerInstance(Context ctxt) {
        if (mJobManager == null) {
            mJobManager = new JobSchedulerManager(ctxt);
        }
        return mJobManager;
    }
    /**
     * 开始执行作业调度
     */
    public void startJobScheduler() {
        // 如果作业服务已经在运行，则返回
        if (AliveJobService.isJobServiceAlive()) {
            return;
        }
        // 构建JobInfo对象，传递给JobSchedulerService
        JobInfo.Builder builder = new JobInfo.Builder(JOB_ID, new ComponentName(mContext, AliveJobService.class));
        // 设置周期为3秒（实际上最低周期为15分钟）
        builder.setPeriodic(3000);
        // 当充电时执行该作业
        builder.setRequiresCharging(true);
        // 构建JobInfo对象
        JobInfo info = builder.build();
        // 开始定时执行该系统作业
        mJobScheduler.schedule(info);
    }
    /**
     * 停止作业调度
     */
    public void stopJobScheduler() {
        mJobScheduler.cancelAll(); // 取消所有作业
    }
}