package com.ruoyi.system.service.impl;


import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.google.gson.Gson;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.system.domain.ClockHolidays;
import com.ruoyi.system.domain.MenuFood;
import com.ruoyi.system.domain.MenuFoodRecord;
import com.ruoyi.system.mapper.ClockHolidaysMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

/**
 * 定时任务
 */
@Component
public class Task {

    @Autowired
    private ClockHolidaysMapper clockHolidaysMapper;
    @Autowired
    private MenuFoodRecordServiceImpl menuFoodRecordService;
    @Autowired
    private MenuFoodServiceImpl menuFoodService;
    private static final Gson GSON = new Gson();

    /***
     *每日食谱记录定时任务
     * 每天23点执行
     * @throws Exception
     */
    @Async
    @Scheduled(cron = "0 0 23 * * ? ")
    public void popover() throws Exception {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        // 格式化日期为星期几,使用中文环境
        String currentDayOfWeek = currentDate.format(DateTimeFormatter.ofPattern("E", Locale.CHINA));
        MenuFood menuFood = new MenuFood();
        menuFood.setMenuFoodTime(currentDayOfWeek);
        menuFood.setIsUse("Y");
        List<MenuFood> menuFoods = menuFoodService.selectMenuFoodList(menuFood);
        if (menuFoods != null && menuFoods.size() > 0) {
            MenuFoodRecord menuFoodRecord = GSON.fromJson(GSON.toJson(menuFoods.get(0)), MenuFoodRecord.class);
            menuFoodRecord.setRecordTime(DateUtils.getNowDate());
            menuFoodRecordService.insertMenuFoodRecord(menuFoodRecord);
        }
    }

    /***
     *获取法定节假日和补班信息
     * 定时:每个月20号2点
     * @throws Exception
     */
    @Async
    //@Scheduled(cron = "0 0/2 * * * ? ")
    //@Scheduled(cron = "0 20 0 * * ? ")
    //@Scheduled(cron = "0/10 * * * * ? ")
    @Scheduled(cron = "0 0 2 20 * ? ")
    public void holidays() {
        String year = DateUtils.getYear();
        //查询是否存在当前年数据
        ClockHolidays clockHoliday = new ClockHolidays();
        clockHoliday.setYear(year);
        List<ClockHolidays> clockHolidaysList = clockHolidaysMapper.selectClockHolidaysList(clockHoliday);
        if(clockHolidaysList!=null && clockHolidaysList.size()>0){
            year = String.valueOf(Integer.parseInt(year) + 1);
        }
        String url = "https://timor.tech/api/holiday/year/"+year;
        String rspStr = HttpUtils.sendGet(url);
        JSONObject obj = JSON.parseObject(rspStr);
        Map<String, Map<String, Object>> holiday = (Map<String, Map<String, Object>>) obj.get("holiday");
        if(ObjectUtils.isEmpty(holiday)){
            return;
        }
        Set<String> strings = holiday.keySet();
        for (String str : strings) {
            Map<String, Object> stringObjectMap = holiday.get(str);
            boolean bool = (Boolean) stringObjectMap.get("holiday");
            ClockHolidays clockHolidays = new ClockHolidays();
            clockHolidays.setYear(year);
            clockHolidays.setHolidayDate((String) stringObjectMap.get("date"));
            clockHolidays.setType("NO");
            if(!bool){
                clockHolidays.setType("YES");
            }
            clockHolidays.setCreateTime(DateUtils.getNowDate());
            clockHolidays.setUpdateTime(DateUtils.getNowDate());
            clockHolidaysMapper.insertClockHolidays(clockHolidays);
        }

        System.out.println("1");

    }
}