package com.ruoyi.info.collection.domain.dto;

import com.ruoyi.info.collection.annotation.EnumValid;
import com.ruoyi.info.collection.enums.AdmitStatus;
import com.ruoyi.info.collection.enums.RecruitType;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.List;

/**
 * 员工招聘信息新增DTO
 *
 * @author ruoyi
 * @date 2025-02-05
 */
@Data
public class CcdiStaffRecruitmentAddDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 招聘记录编号 */
    @NotBlank(message = "招聘记录编号不能为空")
    @Size(max = 32, message = "招聘记录编号长度不能超过32个字符")
    private String recruitId;

    /** 招聘项目名称 */
    @NotBlank(message = "招聘项目名称不能为空")
    @Size(max = 100, message = "招聘项目名称长度不能超过100个字符")
    private String recruitName;

    /** 职位名称 */
    @NotBlank(message = "职位名称不能为空")
    @Size(max = 100, message = "职位名称长度不能超过100个字符")
    private String posName;

    /** 职位类别 */
    @NotBlank(message = "职位类别不能为空")
    @Size(max = 50, message = "职位类别长度不能超过50个字符")
    private String posCategory;

    /** 职位描述 */
    @NotBlank(message = "职位描述不能为空")
    private String posDesc;

    /** 应聘人员姓名 */
    @NotBlank(message = "应聘人员姓名不能为空")
    @Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
    private String candName;

    /** 招聘类型 */
    @NotBlank(message = "招聘类型不能为空")
    @EnumValid(enumClass = RecruitType.class, message = "招聘类型状态值不合法")
    private String recruitType;

    /** 应聘人员学历 */
    @NotBlank(message = "应聘人员学历不能为空")
    @Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
    private String candEdu;

    /** 应聘人员证件号码 */
    @NotBlank(message = "证件号码不能为空")
    @Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$", message = "证件号码格式不正确")
    private String candId;

    /** 应聘人员毕业院校 */
    @NotBlank(message = "应聘人员毕业院校不能为空")
    @Size(max = 50, message = "应聘人员毕业院校长度不能超过50个字符")
    private String candSchool;

    /** 应聘人员专业 */
    @NotBlank(message = "应聘人员专业不能为空")
    @Size(max = 30, message = "应聘人员专业长度不能超过30个字符")
    private String candMajor;

    /** 应聘人员毕业年月 */
    @NotBlank(message = "应聘人员毕业年月不能为空")
    @Pattern(regexp = "^((19|20)\\d{2})(0[1-9]|1[0-2])$", message = "毕业年月格式不正确,应为YYYYMM")
    private String candGrad;

    /** 录用情况:录用、未录用、放弃 */
    @NotBlank(message = "录用情况不能为空")
    @EnumValid(enumClass = AdmitStatus.class, message = "录用情况状态值不合法")
    private String admitStatus;

    /** 面试官1姓名 */
    @Size(max = 20, message = "面试官1姓名长度不能超过20个字符")
    private String interviewerName1;

    /** 面试官1工号 */
    @Size(max = 10, message = "面试官1工号长度不能超过10个字符")
    private String interviewerId1;

    /** 面试官2姓名 */
    @Size(max = 20, message = "面试官2姓名长度不能超过20个字符")
    private String interviewerName2;

    /** 面试官2工号 */
    @Size(max = 10, message = "面试官2工号长度不能超过10个字符")
    private String interviewerId2;

    /** 历史工作经历列表 */
    @Valid
    private List<CcdiStaffRecruitmentWorkEditDTO> workExperienceList;
}
