package com.yida.data.attendance.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.yida.data.attendance.dto.AddAttendanceRuleAddressDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleAdminDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleDeviceDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleObjDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleRemindDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleSpecialDateDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleTimeDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleWhiteListDTO;
import com.yida.data.attendance.dto.AddAttendanceRuleWifiDTO;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AttendanceRuleVO {

    @ApiModelProperty(value = "主键id")
    private Long id;

    /**
     *
     */
    @ApiModelProperty(value = "")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createDate;

    /**
     *
     */
    @ApiModelProperty(value = "")
    private Long createId;

    /**
     *
     */
    @ApiModelProperty(value = "")
    private String createName;

    /**
     *
     */
    @ApiModelProperty(value = "")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateDate;

    /**
     *
     */
    @ApiModelProperty(value = "")
    private Long updateId;

    /**
     *
     */
    @ApiModelProperty(value = "")
    private Integer delFlag;


    /**
     * 学校id
     */
    @ApiModelProperty(value = "学校id")
    private Long schoolId;

    /**
     * 考勤规则名称
     */
    @ApiModelProperty(value = "考勤规则名称")
    private String name;

    /**
     * 0-教职工打卡，1学生上学考勤，2学生宿舍考勤
     */
    @ApiModelProperty(value = "0-教职工打卡，1学生上学考勤，2学生宿舍考勤")
    private Integer userType;

    /**
     * 0-固定上下班时间模式，1自由打卡模式
     */
    @ApiModelProperty(value = "0-固定上下班时间模式，1自由打卡模式")
    private Integer type;

    /**
     * 打卡日期，1-周一，2-周二....多个用','连接
     */
    @ApiModelProperty(value = "打卡日期，1-周一，2-周二....多个用','连接")
    private String week;

    /**
     * 法定节假日是否打卡，0-是，1-否
     */
    @ApiModelProperty(value = "法定节假日是否打卡，0-是，1-否")
    private Integer holidayAttendance;

    /**
     * 管理员打卡规则内容权限，0-无，1-有
     */
    @ApiModelProperty(value = "管理员打卡规则内容权限，0-无，1-有")
    private Integer roleRule;

    /**
     * 管理员打卡人员与白名单权限，0-无，1-有
     */
    @ApiModelProperty(value = "管理员打卡人员与白名单权限，0-无，1-有")
    private Integer roleUser;

    /**
     * 管理员节假日与特殊日期权限，0-无，1-有
     */
    @ApiModelProperty(value = "管理员节假日与特殊日期权限，0-无，1-有")
    private Integer roleDate;

    /**
     * 管理员打卡提醒权限，0-无，1-有
     */
    @ApiModelProperty(value = "管理员打卡提醒权限，0-无，1-有")
    private Integer roleRemind;

    /**
     * 打卡是必须拍照 0-无，1-必须
     */
    @ApiModelProperty(value = "打卡是必须拍照 0-无，1-必须")
    private Integer photoTake;

    /**
     * 打卡时必须人脸识别0-无，1-必须
     */
    @ApiModelProperty(value = "打卡时必须人脸识别0-无，1-必须")
    private Integer faceTake;

    /**
     * 填写备注时必须拍照0-无，1-必须
     */
    @ApiModelProperty(value = "填写备注时必须拍照0-无，1-必须")
    private Integer photoRemark;

    /**
     * 异常打卡可以提交申请，审批后可修正打卡状态
     */
    @ApiModelProperty(value = "异常打卡可以提交申请，审批后可修正打卡状态")
    private Integer applyAmendment;

    /**
     * 每月补卡次数
     */
    @ApiModelProperty(value = "每月补卡次数")
    private Integer reissueNum;

    /**
     * 启用状态：0-未启用，1-已启用
     */
    @ApiModelProperty(value = "启用状态：0-未启用，1-已启用")
    private Integer status;

    /**
     * 每月补卡截止日期
     */
    @ApiModelProperty(value = "每月补卡截止日期")
    private Integer reissueEndDate;

    @ApiModelProperty(value = "有效开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private LocalDate startDate;

    @ApiModelProperty(value = "有效结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private LocalDate endDate;

    @ApiModelProperty(value = "打卡提醒")
    private List<AddAttendanceRuleRemindDTO> remindDTOList;
    @ApiModelProperty(value = "打卡对象")
    private List<AddAttendanceRuleObjDTO> attendanceRuleObjList;
    @ApiModelProperty(value = "特殊日期")
    private List<AddAttendanceRuleSpecialDateDTO> specialDateDTOList;
    @ApiModelProperty(value = "白名单")
    private List<AddAttendanceRuleWhiteListDTO> whiteListDTOList;
    @ApiModelProperty(value = "打卡设备")
    private List<AddAttendanceRuleDeviceDTO> deviceDTOList;
    @ApiModelProperty(value = "打卡wifi")
    private List<AddAttendanceRuleWifiDTO> wifiDTOList;
    @ApiModelProperty(value = "打卡地点")
    private List<AddAttendanceRuleAddressDTO> addressDTOList;
    @ApiModelProperty(value = "打卡时间段")
    private List<AddAttendanceRuleTimeDTO> timeDTOList;
    @ApiModelProperty(value = "管理员")
    private List<AddAttendanceRuleAdminDTO> adminDTOList;
}
