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.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 员工亲属关系编辑DTO
 *
 * @author ruoyi
 * @date 2026-02-09
 */
@Data
@Schema(description = "员工亲属关系编辑")
public class CcdiStaffFmyRelationEditDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    @NotNull(message = "ID不能为空")
    @Schema(description = "主键ID")
    private Long id;

    /** 员工身份证号 */
    @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}[\\dXx]$", message = "员工身份证号格式不正确")
    @Schema(description = "员工身份证号")
    private String personId;

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

    /** 关系人姓名 */
    @NotBlank(message = "关系人姓名不能为空")
    @Size(max = 100, message = "关系人姓名长度不能超过100个字符")
    @Schema(description = "关系人姓名")
    private String relationName;

    /** 性别 */
    @Pattern(regexp = "^[MFO]$", message = "性别只能是M、F或O")
    @Schema(description = "性别：M-男，F-女，O-其他")
    private String gender;

    /** 出生日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Schema(description = "出生日期")
    private Date birthDate;

    /** 关系人证件类型 */
    @NotBlank(message = "关系人证件类型不能为空")
    @Size(max = 50, message = "关系人证件类型长度不能超过50个字符")
    @Schema(description = "关系人证件类型")
    private String relationCertType;

    /** 关系人证件号码 */
    @NotBlank(message = "关系人证件号码不能为空")
    @Size(max = 100, message = "关系人证件号码长度不能超过100个字符")
    @Schema(description = "关系人证件号码")
    private String relationCertNo;

    /** 手机号码1 */
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码1格式不正确")
    @Schema(description = "手机号码1")
    private String mobilePhone1;

    /** 手机号码2 */
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码2格式不正确")
    @Schema(description = "手机号码2")
    private String mobilePhone2;

    /** 家庭成员年收入 */
    @Schema(description = "家庭成员年收入（元/年）")
    private BigDecimal annualIncome;

    /** 微信名称1 */
    @Size(max = 50, message = "微信名称1长度不能超过50个字符")
    @Schema(description = "微信名称1")
    private String wechatNo1;

    /** 微信名称2 */
    @Size(max = 50, message = "微信名称2长度不能超过50个字符")
    @Schema(description = "微信名称2")
    private String wechatNo2;

    /** 微信名称3 */
    @Size(max = 50, message = "微信名称3长度不能超过50个字符")
    @Schema(description = "微信名称3")
    private String wechatNo3;

    /** 详细联系地址 */
    @Size(max = 500, message = "详细联系地址长度不能超过500个字符")
    @Schema(description = "详细联系地址")
    private String contactAddress;

    /** 关系详细描述 */
    @Size(max = 500, message = "关系详细描述长度不能超过500个字符")
    @Schema(description = "关系详细描述")
    private String relationDesc;

    /** 生效日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Schema(description = "生效日期")
    private Date effectiveDate;

    /** 失效日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Schema(description = "失效日期")
    private Date invalidDate;

    /** 状态 */
    @Schema(description = "状态：0-无效，1-有效")
    private Integer status;

    /** 备注 */
    @Schema(description = "备注")
    private String remark;

    /** 亲属资产列表 */
    @Schema(description = "亲属资产列表")
    private List<CcdiAssetInfoDTO> assetInfoList;
}
