package jnpf.util.attendance;

import cn.hutool.core.collection.CollUtil;
import jnpf.entity.AttendanceGroupUser;

import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * 借调类型（secondmentType）解析工具。
 * <p>统一封装 {@link AttendanceGroupUserStatusUtil#isExistStatus} 与 VO 字段 secondmentType 的映射口径。</p>
 */
public final class SecondmentTypeUtil {

    private SecondmentTypeUtil() {
    }

    /**
     * 将 {@code isExistStatus} 返回值映射为 secondmentType。
     *
     * @param existStatus isExistStatus 返回值（-1已离 0未入 1正常 2全天被借调 3部分被借调 4借调）
     * @return 0无借调 1借调入 2借调出
     */
    public static int toSecondmentType(Integer existStatus) {
        return Objects.equals(existStatus, 4)
                ? 2
                : (Objects.equals(existStatus, 2) || Objects.equals(existStatus, 3) ? 1 : 0);
    }

    /**
     * 根据考勤组成员与单日解析 secondmentType。
     */
    public static int resolveSecondmentType(List<AttendanceGroupUser> users, Date date) {
        if (CollUtil.isEmpty(users) || date == null) {
            return 0;
        }
        return toSecondmentType(AttendanceGroupUserStatusUtil.isExistStatus(users, date));
    }

    /**
     * 根据考勤组成员与时间范围解析 secondmentType。
     */
    public static int resolveSecondmentType(List<AttendanceGroupUser> users, Date start, Date end) {
        if (CollUtil.isEmpty(users) || start == null || end == null) {
            return 0;
        }
        return toSecondmentType(AttendanceGroupUserStatusUtil.isExistStatus(users, start, end));
    }
}
