package jnpf.model.attendance.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserDaySituationData {
    /**
     * 日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date day;
    /**
     * 是否排班
     */
    private Integer isScheduling;
    /**
     * 班次类型 0全天班次 1上午班次 2下午班次
     */
    private Integer schedulesType;
    /**
     * 是否固定班 3自动排休调休上班 2为划线排班
     */
    private Integer fixedMark;
    /**
     * 请假天数
     */
    private BigDecimal leaveDay;
    /**
     * 时段工时
     */
    private BigDecimal periodWorkDay;
    /**
     * 班次时段信息
     */
    private String periodInfo;
    /**
     * 考勤组出勤id
     */
    private String ruleId;
    /**
     * 是否自己的考勤组(0未产生借调 1被借调 2借调)
     */
    private Integer selfGroup;
    /**
     * 请假申请记录ID
     */
    private String applyId;
    /**
     * 出勤类型(1: 普班, 2: 排休, 3: 请假, 4: 加班, 5: 借调, 6: 假期, 7: 假期(带薪))
     */
    private Integer attendanceType;
    /**
     * 审核数据展示标识（1 起效，0 失效，2 打卡不展示，3 考勤组剔除人员待删除，9 标识出差，10 标识外出）
     */
    private Integer applyViewEnable;
    /**
     * 上班时间点
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date inPoint;
    /**
     * 下班时间点
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date outPoint;
    /**
     * 有效时长(min)
     */
    private Integer validDuration;
    /**
     * 计薪工时
     */
    @TableField(value = "F_PayrollHours")
    private BigDecimal payrollHours;

    public BigDecimal getPayrollHours() {
        if(Objects.nonNull(payrollHours)) {
            return payrollHours;
        }
        return BigDecimal.valueOf(validDuration).divide(BigDecimal.valueOf(60), 4, RoundingMode.HALF_UP);
    }
    /**
     * 打卡结果信息
     */
    private List<ClockInResult> clockInResultList;
}
