package com.aegis.resource.expert.domain;

import com.aegis.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.math.BigDecimal;
import java.util.List;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 专家实体类 resource_expert
 *
 * @author aegis
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("resource_expert")
public class Expert extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /** 专家ID */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 专家姓名 */
    @NotBlank(message = "专家姓名不能为空")
    @Size(max = 64, message = "专家姓名长度不能超过64个字符")
    private String expertName;

    /** 专家编号 */
    @Size(max = 50, message = "专家编号长度不能超过50个字符")
    private String expertCode;

    /** 身份证号 */
    @Size(max = 18, message = "身份证号长度不能超过18个字符")
    private String idCard;

    /** 所属单位 */
    @Size(max = 200, message = "所属单位长度不能超过200个字符")
    private String organization;

    /** 专长领域（JSON数组，存储格式） */
    @Size(max = 500, message = "专长领域长度不能超过500个字符")
    private String specialties;

    /** 联系电话 */
    @Size(max = 20, message = "联系电话长度不能超过20个字符")
    private String phone;

    /** 邮箱 */
    @Email(message = "邮箱格式不正确")
    @Size(max = 100, message = "邮箱长度不能超过100个字符")
    private String email;

    /** 关联系统用户ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long sysUserId;

    /** 状态：active-启用，inactive-停用，blacklisted-黑名单 */
    private String status;

    /** 评分（1-5） */
    private Integer rating;

    /** 能力标签（JSON数组，存储格式） */
    @Size(max = 500, message = "能力标签长度不能超过500个字符")
    private String capabilities;

    /** 联系方式（JSON格式） */
    private String contacts;

    /** 常驻地点名称/描述 */
    @Size(max = 255, message = "常驻地点名称长度不能超过255个字符")
    private String locationName;

    /** 经度 */
    private BigDecimal longitude;

    /** 纬度 */
    private BigDecimal latitude;

    @JsonIgnore
    @TableField(exist = false)
    private transient List<String> specialtiesList;

    @JsonIgnore
    @TableField(exist = false)
    private transient List<String> capabilitiesList;

    /** 删除标志（0代表存在 2代表删除） */
    @TableLogic
    private String delFlag;
}