package com.fxy.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.job.JobInfo;
import android.app.job.JobScheduler;
import android.content.ComponentName;
import android.content.Context;

import com.elvishew.xlog.XLog;
import com.fxy.constant.SPCache;
import com.fxy.service.UploadJobService;

import java.util.List;

public class JobUtils {

    /**
     * 设备空闲时
     * @param context Activity
     */
    public static void deviceIdleJob(Context context){
        JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        List<JobInfo> jobInfoList = jobScheduler.getAllPendingJobs();
        for (int i = 0; i < jobInfoList.size(); i++) {
            if (jobInfoList.get(i).getId()==UploadJobService.DEVICE_IDLE_JOB_ID){
                return;
            }
        }

        @SuppressLint("JobSchedulerService")
        JobInfo.Builder builder = new JobInfo.Builder(UploadJobService.DEVICE_IDLE_JOB_ID, new ComponentName(context, UploadJobService.class));


        // 设置任务在设备空闲时执行
        builder.setRequiresDeviceIdle(true);

        // 或者，如果你也想要在充电时执行（可以与空闲条件组合，但通常不需要同时满足）
        // builder.setRequiresCharging(true); // 如果只需要在充电时执行，则取消注释这行代码

        // 可以设置其他条件，如网络状态等
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);


        SPCache spCache = SPCache.getInstance(context);
        int  leisure = spCache.getLeisure();

        // 其他设置，如网络条件、延迟等
        builder.setMinimumLatency(1000 * 60 * leisure); // 延迟至少60秒
//        builder.setMinimumLatency(10); // 延迟至少60秒
        builder.setOverrideDeadline(4*60 * 1000 * 60); // 最多延迟2小时
//        builder.setPersisted(true); // 任务会被持久化
//        builder.setPeriodic(15 * 60 * 1000); // 设置周期性任务的时间间隔
        JobInfo jobInfo = builder.build();


        int result = jobScheduler.schedule(jobInfo);
        if (result == JobScheduler.RESULT_SUCCESS) {
            // 任务安排成功
            XLog.d("设备空闲"+leisure+"分钟后任务安排成功");
        } else {
            // 任务安排失败
            XLog.d("定时任务安排失败");
        }
    }

    public static void chargingJob(Context context){
        JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        List<JobInfo> jobInfoList = jobScheduler.getAllPendingJobs();
        for (int i = 0; i < jobInfoList.size(); i++) {
            if (jobInfoList.get(i).getId()==UploadJobService.CHARGING_JOB_ID){
                return;
            }
        }
        @SuppressLint("JobSchedulerService")
        JobInfo.Builder builder = new JobInfo.Builder(UploadJobService.CHARGING_JOB_ID, new ComponentName(context, UploadJobService.class));



        // 设置任务在设备空闲时执行
//        builder.setRequiresDeviceIdle(true);

        // 或者，如果你也想要在充电时执行（可以与空闲条件组合，但通常不需要同时满足）
        // builder.setRequiresCharging(true); // 如果只需要在充电时执行，则取消注释这行代码

        // 可以设置其他条件，如网络状态等
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);


        // 其他设置，如网络条件、延迟等
        builder.setMinimumLatency(1000 * 90); // 延迟至少60秒
        //builder.setMinimumLatency(1000); // 延迟至少60秒
        builder.setOverrideDeadline(2*60 * 1000 * 60); // 最多延迟2分钟

        JobInfo jobInfo = builder.build();


        int result = jobScheduler.schedule(jobInfo);
        if (result == JobScheduler.RESULT_SUCCESS) {
            // 任务安排成功
            XLog.d("充电定时任务安排成功");
        } else {
            // 任务安排失败
            XLog.d("充电定时任务安排失败");
        }
    }

    public static void cancel(Activity activity){
        JobScheduler jobScheduler = (JobScheduler) activity.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        // 取消指定的任务
        jobScheduler.cancel(UploadJobService.CHARGING_JOB_ID);
        jobScheduler.cancel(UploadJobService.DEVICE_IDLE_JOB_ID);
    }

}
