package com.sy.coinage.sys.req;

import com.sy.coinage.core.interceptor.Create;
import com.sy.coinage.core.interceptor.Update;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;

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

import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
import org.hibernate.validator.constraints.Range;

/**
 * 用户添加请求bean
 */
@Data
public class UserReq implements Serializable {

    private static final long serialVersionUID = 1L;
    /**
     * 自增主键 -10
     */
    @ApiModelProperty(value = "自增主键")
    @NotNull(message = "自增主键不能为空", groups = {Update.class})
    @Range(min = 1, groups = {Update.class})
    private Integer id;
    /**
     * 用户类型 1管理员 -3
     */
    // @NotNull(message = "用户类型 1管理员不能为空")
    private Integer type;

    /**
     * 性别 1男 2女 3未知 -3
     */
    @ApiModelProperty(value = "性别 1男 2女 3未知")
    @NotNull(message = "性别 1男 2女 3未知不能为空")
    private Integer sex;
    /**
     * 机构id -10
     */
    @ApiModelProperty(value = "机构id")
    private Integer orgId;
    /**
     * 部门id -10
     */
    @ApiModelProperty(value = "部门id")
    // @NotNull(message = "部门id不能为空")
    private Integer deptId;
    /**
     * 真实姓名 -10
     */
    @ApiModelProperty(value = "真实姓名")
    @NotBlank(message = "真实姓名不能为空")
    @Length(max = 10, message = "真实姓名长度不正确")
    private String realName;
    /**
     * 手机号 -12
     */
    @ApiModelProperty(value = "手机号")
//    @NotBlank(message = "手机号不能为空")
    @Length(max = 12, message = "手机号长度不正确")
    private String mobile;
    /**
     * 用户名 -16
     */
    @ApiModelProperty(value = "用户名")
    @NotBlank(message = "用户名不能为空", groups = {Create.class})
    @Length(max = 16, message = "用户名长度不正确")
    private String username;
    /**
     * 电话 -16
     */
    // @NotBlank(message = "电话不能为空")
    @Length(max = 16, message = "电话长度不正确")
    private String telephone;
    /**
     * 生日 -10
     */
    @JSONField(format = "yyyy-MM-dd")
    private Date birthday;
    /**
     * 电子邮箱 -32
     */
    // @NotBlank(message = "电子邮箱不能为空")
    @Length(max = 32, message = "电子邮箱长度不正确")
    private String email;
    /**
     * 工号 -32
     */
    // @NotBlank(message = "工号不能为空")
    @Length(max = 32, message = "工号长度不正确")
    private String workNo;
    /**
     * 职务 -32
     */
    // @NotBlank(message = "职务不能为空")
    @Length(max = 32, message = "职务长度不正确")
    private String duty;
    /**
     * 头像 -200
     */
    // @NotBlank(message = "头像不能为空")
    @Length(max = 200, message = "头像长度不正确")
    private String avatar;
    /**
     * 备注 -200
     */
    // @NotBlank(message = "备注不能为空")
    @Length(max = 200, message = "备注长度不正确")
    private String remark;

    /**
     * 角色id集合
     */
    @NotEmpty(message = "角色不能为空")
    private List<@NotNull Integer> roleIds;

    @NotBlank(message = "密码不能为空", groups = {Create.class})
    @Length(max = 32, message = "密码长度不正确", groups = {Create.class})
    private String password;

    /**
     * -用户编号：沈币唯一标识符8位,由用户填写 -8
     */
    @ApiModelProperty(value = "用户编号：沈币唯一标识符8位,由用户填写", required = true)
    @NotBlank(message = "用户编号不能为空")
    @Length(max = 8, message = "用户编号长度8不正确")
    private String code;
    /**
     * -卡号：每个卡号对应一个员工编号，使用卡号进行登录 -20
     */
    @ApiModelProperty(value = "卡号：每个卡号对应一个员工编号，使用卡号进行登录", required = true)
    @NotBlank(message = "卡号不能为空")
    @Length(max = 20, message = "卡号长度20不正确")
    private String cardNumber;

    @ApiModelProperty(value = "状态")
    private Integer status;

}
