package com.tourism.webadmin.back.dto;

import com.baomidou.mybatisplus.annotation.TableField;
import com.tourism.common.core.validator.UpdateGroup;
import com.tourism.common.core.validator.ConstDictRef;
import com.tourism.webadmin.upms.model.constant.SysUserStatus;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.*;

import java.util.Date;

/**
 * 门户用户管理Dto对象。
 *
 * @author 吃饭睡觉
 * @date 2024-09-06
 */
@Schema(description = "TourUserDto对象")
@Data
public class TourUserDto {

    /**
     * 主键Id。
     */
    @Schema(description = "主键Id。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，主键Id不能为空！", groups = {UpdateGroup.class})
    private Long userId;

    /**
     * 用户登录名称。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "用户登录名称。可支持等于操作符的列表数据过滤。")
    private String loginName;

    /**
     * 密码。
     */
    @Schema(description = "密码。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，密码不能为空！")
    private String password;

    /**
     * 昵称。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "昵称。可支持等于操作符的列表数据过滤。")
    private String showName;

    /**
     * 用户头像的Url。
     */
    @Schema(description = "用户头像的Url。")
    private String headImageUrl;

    /**
     * 状态(0: 正常 1: 锁定)。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "状态(0: 正常 1: 锁定)。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "数据验证失败，状态(0: 正常 1: 锁定)不能为空！")
    @ConstDictRef(constDictClass = SysUserStatus.class, message = "数据验证失败，状态(0: 正常 1: 锁定)为无效值！")
    private Integer userStatus;

    /**
     * 用户邮箱。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "用户邮箱。可支持等于操作符的列表数据过滤。")
    private String email;

    /**
     * 用户手机。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "用户手机。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "数据验证失败，用户手机不能为空！")
    private String mobile;

    /**
     * 性别(1:男 2:女 3:其它)。
     * NOTE: 可支持等于操作符的列表数据过滤。
     */
    @Schema(description = "性别(1:男 2:女 3:其它)。可支持等于操作符的列表数据过滤。")
    private String sex;

    /**
     * 生日。
     */
    @Schema(description = "生日。")
    private Date birthday;

    /**
     * login_name / show_name / email / mobile LIKE搜索字符串。
     * NOTE: 可支持LIKE操作符的列表数据过滤。
     */
    @Schema(description = "LIKE模糊搜索字符串")
    private String searchString;

    /**
     * 国家区号。
     */
    private String countryCode;

    /**
     *  住址
     */
    private String address;

    /**
     *  职业
     */
    private String job;
}
