package jnpf.model.attendance.vo.attendance;

import cn.hutool.core.collection.CollUtil;
import jnpf.model.attendance.model.BatchNumberResult;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

import static com.alibaba.fastjson.JSON.parseArray;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MonthStatisticsQueryVo {
    /**
     * ID
     */
    private String id;
    /**
     * 用户ID
     */
    private String userId;
    /**
     * 考勤组id
     */
    private String groupId;
    /**
     * 考勤月份
     */
    private String month;
    /**
     * 已休|应休
     */
    private String retired;
    /**
     * 出勤换算比
     */
    private BigDecimal attendanceRatio;
    /**
     * 应出勤天数
     */
    private BigDecimal shouldAttendDays;
    /**
     * 应出勤小时数
     */
    private BigDecimal shouldAttendHours;
    /**
     * 有效出勤天数
     */
    private BigDecimal effectiveAttendDays;
    /**
     * 有效出勤小时数
     */
    private BigDecimal effectiveAttendHours;
    /**
     * 实际出勤天数
     */
    private BigDecimal actualAttendDays;
    /**
     * 实际出勤小时数
     */
    private BigDecimal actualAttendHours;
    /**
     * 迟到次数
     */
    private Integer lateTimes;
    /**
     * 迟到分钟数
     */
    private BigDecimal lateMinutes;
    /**
     * 早退次数
     */
    private Integer earlyLeaveTimes;
    /**
     * 早退分钟数
     */
    private BigDecimal earlyLeaveMinutes;
    /**
     * 缺卡次数
     */
    private Integer absenceCardTimes;
    /**
     * 缺卡天数
     */
    private BigDecimal absenceCardDays;
    /**
     * 补卡次数
     */
    private Integer makeUpCardTimes;
    /**
     * 外勤次数
     */
    private Integer outworkTimes;
    /**
     * 旷工次数
     */
    private Integer absenceTimes;
    /**
     * 旷工天数
     */
    private BigDecimal absenceDays;
    /**
     * 出差次数
     */
    private String busTimes;
    /**
     * 出差天数
     */
    private BigDecimal busDays;
    /**
     * 外出次数
     */
    private List<String> outTimes;
    /**
     * 外出天数
     */
    private BigDecimal outDays;
    /**
     * 加班次数
     */
    private Integer overtimeTimes;
    /**
     * 节假日加班小时数
     */
    private BigDecimal holidaysOvertimeHours;
    /**
     * 公休日加班小时数
     */
    private BigDecimal publicHolidaysOvertimeHours;
    /**
     * 工作日加班小时数
     */
    private BigDecimal weekdayOvertimeHours;
    /**
     * 请假次数
     */
    private String leaveTimes;
    /**
     * 请假天数
     */
    private BigDecimal leaveDays;
    /**
     * 请假小时数
     */
    private BigDecimal leaveHours;
    /**
     * 借调天数
     */
    private Integer selfGroupTimes;
    /**
     * 休息次数
     */
    private Integer restTimes;
    /**
     * 调休天数
     */
    private BigDecimal compensationDays;
    /**
     * 自定义假期动态Json
     */
    private List<LinkedHashMap<String, Object>> customLeaveList;


    /**
     * 获取月统计自定义外出数据
     *
     * @param outTimes 自定义外出数据
     * @return 自定义外出数据
     */
    public static List<BatchNumberResult> getOutTimesList(List<String> outTimes) {
        if (CollUtil.isEmpty(outTimes)) {
            return new ArrayList<>();
        }
        List<BatchNumberResult> batchNumberResults = new ArrayList<>();
        for (String item : outTimes) {
            List<BatchNumberResult> shiftsJsonVoList = parseArray(item, BatchNumberResult.class);
            if (CollUtil.isNotEmpty(shiftsJsonVoList)) {
                batchNumberResults.addAll(shiftsJsonVoList);
            }
        }
        return batchNumberResults;
    }
}
