package com.hotwj.platform.driverManagement.driver.domain.bo;

import com.hotwj.platform.driverManagement.driver.domain.HotDriver;
import com.hotwj.platform.driverManagement.driverFamilyMember.domain.bo.HotDriverFamilyMemberBo;
import com.hotwj.platform.driverManagement.driverHealthReport.domain.bo.HotDriverHealthReportBo;
import com.hotwj.platform.driverManagement.driverLaborContract.domain.bo.HotDriverLaborContractBo;
import com.hotwj.platform.driverManagement.driverWorkExperience.domain.bo.HotDriverWorkExperienceBo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;

import java.util.Date;
import java.util.List;

/**
 * 驾驶员基本信息业务对象 hot_driver
 *
 * @author shihongwei
 * @date 2025-12-19
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = HotDriver.class, reverseConvertGenerate = false)
public class HotDriverBo extends BaseEntity {

    /**
     * 主键
     */
    @NotNull(message = "主键不能为空", groups = {EditGroup.class})
    private String id;

    private List<String> ids;

    /**
     * 公司ID
     */
    private Long companyId;

    /**
     * 车辆Id
     */
    private String vehicleId;

    /**
     * 车牌号
     */
    private String plateNumber;

    /**
     * 入职日期
     */
//    @NotNull(message = "入职日期不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date entryDate;

    /**
     * 姓名
     */
    @NotBlank(message = "姓名不能为空", groups = {AddGroup.class, EditGroup.class})
    private String name;

    /**
     * 人员类型（字典/下拉）
     */
    private String personType;

    /**
     * 驾驶年限（年）
     */
    private Long drivingYears;

    /**
     * 手机号码
     */
    @NotBlank(message = "手机号码不能为空", groups = {AddGroup.class, EditGroup.class})
    private String phone;

    /**
     * 性别
     */
    @NotBlank(message = "性别不能为空", groups = {AddGroup.class, EditGroup.class})
    private String gender;

    /**
     * 民族
     */
    @NotBlank(message = "民族不能为空", groups = {AddGroup.class, EditGroup.class})
    private String nation;

    /**
     * 参加工作时间
     */
    private Date startWorkDate;

    /**
     * 户籍地址
     */
    private String householdAddress;

    /**
     * 籍贯
     */
    private String nativePlace;

    /**
     * 现居地
     */
    private String currentAddress;

    /**
     * 是否党员：1是 0否
     */
//    @NotNull(message = "是否党员：1是 0否不能为空", groups = {AddGroup.class, EditGroup.class})
    private Long isPartyMember;

    /**
     * 政治面貌
     */
    private String politicalStatus;
    
    /**
     * 婚姻状态：1已婚 0未婚
     */
//    @NotNull(message = "婚姻状态：1已婚 0未婚不能为空", groups = {AddGroup.class, EditGroup.class})
    private Long maritalStatus;

    /**
     * 学历（字典）
     */
    private String education;

    /**
     * 健康状态/体检结论（字典）
     */
    private String healthStatus;

    /**
     * 出生日期
     */
    private Date birthDate;

    /**
     * 身份证号
     */
    @NotBlank(message = "身份证号不能为空", groups = {AddGroup.class, EditGroup.class})
    private String idCardNo;

    /**
     * 身份证到期日期
     */
    private Date idCardExpireDate;

    /**
     * 身份证长期有效：1是 0否
     */
    private Long idCardLongTerm;

    /**
     * 身份证正面URL
     */
    private String idcardFrontUrl;

    /**
     * 身份证反面URL
     */
    private String idcardBackUrl;

    /**
     * 寸照URL
     */
    private String portraitUrl;

    /**
     * 电子签名URL
     */
    private String signatureUrl;

    /**
     * 诚信承诺到期日期
     */
    private Date integrityPromiseExpireDate;

    /**
     * 诚信考核等级（字典）
     */
    private String integrityLevel;

    /**
     * 诚信承诺书附件URL
     */
    private String integrityPromiseAttachmentUrl;

    /**
     * 人事意见
     */
    private String hrOpinion;

    /**
     * 部门意见
     */
    private String deptOpinion;

    /**
     * 公司领导意见
     */
    private String leaderOpinion;

    /**
     * 处分或表彰说明
     */
    private String rewardOrPunishment;

    /**
     * 签名
     */
    private String signature;

    /**
     * 状态：1=正常 0=禁用
     */
    private Long status;

    /**
     * 审核状态：0=待审核 1=审核通过 2=审核驳回
     */
    private Integer auditStatus;

    /**
     * 邀请码（非数据库字段）
     */
    private String inviteCode;

    /**
     * 0=正常, 1=已删除
     */
    private Long isDeleted;

    /**
     * 驾驶证初次领证日期
     */
//    @NotNull(message = "驾驶证初次领证日期不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date driverLicenseFirstIssueDate;

    /**
     * 驾驶证到期时间
     */
//    @NotNull(message = "驾驶证到期时间不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date driverLicenseExpireDate;

    /**
     * 驾驶证是否长期 0否 1是
     */
//    @NotNull(message = "驾驶证是否长期 0否 1是不能为空", groups = {AddGroup.class, EditGroup.class})
    private Long driverLicenseLongTerm;

    /**
     * 准驾车型
     */
//    @NotBlank(message = "准驾车型不能为空", groups = {AddGroup.class, EditGroup.class})
    private String driverLicenseVehicleType;

    /**
     * 驾驶证号
     */
    private String driverLicenseNo;

    /**
     * 档案号
     */
    private String driverLicenseArchiveNo;

    /**
     * 驾驶证发证机关
     */
    private String driverLicenseOrg;

    /**
     * 驾驶证主页图片地址
     */
    private String driverLicenseMainImg;

    /**
     * 驾驶证副页图片地址
     */
    private String driverLicenseViceImg;

    /**
     * 驾驶证其他附页图片地址
     */
    private String driverLicenseOtherImg;

    /**
     * 从业资格证类别
     */
//    @NotBlank(message = "从业资格证类别不能为空", groups = {AddGroup.class, EditGroup.class})
    private String qualificationType;

    /**
     * 从业资格证号
     */
//    @NotBlank(message = "从业资格证号不能为空", groups = {AddGroup.class, EditGroup.class})
    private String qualificationNo;

    /**
     * 从业资格证初次申领日期
     */
    private Date qualificationFirstIssueDate;

    /**
     * 从业资格证有效起始日期
     */
    private Date qualificationValidStartDate;

    /**
     * 从业资格证有效终止日期
     */
//    @NotNull(message = "从业资格证有效终止日期不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date qualificationValidEndDate;

    /**
     * 从业资格证发证机关
     */
    private String qualificationOrg;

    /**
     * 从业资格证图片地址
     */
    private String qualificationImg;


    // 子表数据
     /**
     * 驾驶员家庭成员列表
     */
    private List<HotDriverFamilyMemberBo> driverFamilyMemberList;

    /**
     * 驾驶员工作经历列表
     */
    private List<HotDriverWorkExperienceBo> driverWorkExperienceList;

     /**
     * 驾驶员劳动合同列表
     */
    private List<HotDriverLaborContractBo> driverLaborContractList;

    /**
     * 驾驶员健康报告列表
     */
    private List<HotDriverHealthReportBo> driverHealthReportList;
}
