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

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

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

/**
 * 员工调动记录新增DTO
 *
 * @author ruoyi
 * @date 2026-02-10
 */
@Data
@Schema(description = "员工调动记录新增")
public class CcdiStaffTransferAddDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 员工ID */
    @NotNull(message = "员工ID不能为空")
    @Schema(description = "员工ID")
    private Long staffId;

    /** 调动类型 */
    @NotBlank(message = "调动类型不能为空")
    @Size(max = 50, message = "调动类型长度不能超过50个字符")
    @Schema(description = "调动类型")
    private String transferType;

    /** 调动子类型 */
    @Size(max = 100, message = "调动子类型长度不能超过100个字符")
    @Schema(description = "调动子类型")
    private String transferSubType;

    /** 调动前部门ID */
    @NotNull(message = "调动前部门ID不能为空")
    @Schema(description = "调动前部门ID")
    private Long deptIdBefore;

    /** 调动前部门 */
    @Size(max = 200, message = "调动前部门长度不能超过200个字符")
    @Schema(description = "调动前部门")
    private String deptNameBefore;

    /** 调动前职级 */
    @Size(max = 50, message = "调动前职级长度不能超过50个字符")
    @Schema(description = "调动前职级")
    private String gradeBefore;

    /** 调动前岗位 */
    @Size(max = 100, message = "调动前岗位长度不能超过100个字符")
    @Schema(description = "调动前岗位")
    private String positionBefore;

    /** 调动前薪酬等级 */
    @Size(max = 50, message = "调动前薪酬等级长度不能超过50个字符")
    @Schema(description = "调动前薪酬等级")
    private String salaryLevelBefore;

    /** 调动后部门ID */
    @NotNull(message = "调动后部门ID不能为空")
    @Schema(description = "调动后部门ID")
    private Long deptIdAfter;

    /** 调动后部门 */
    @Size(max = 200, message = "调动后部门长度不能超过200个字符")
    @Schema(description = "调动后部门")
    private String deptNameAfter;

    /** 调动后职级 */
    @Size(max = 50, message = "调动后职级长度不能超过50个字符")
    @Schema(description = "调动后职级")
    private String gradeAfter;

    /** 调动后岗位 */
    @Size(max = 100, message = "调动后岗位长度不能超过100个字符")
    @Schema(description = "调动后岗位")
    private String positionAfter;

    /** 调动后薪酬等级 */
    @Size(max = 50, message = "调动后薪酬等级长度不能超过50个字符")
    @Schema(description = "调动后薪酬等级")
    private String salaryLevelAfter;

    /** 调动日期 */
    @NotNull(message = "调动日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Schema(description = "调动日期")
    private Date transferDate;
}
