package com.cy.guoyan.admin.module.guoyan.controller.admin.expertinfo.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import com.cy.guoyan.admin.framework.excel.core.annotations.DictFormat;
import com.cy.guoyan.admin.framework.excel.core.convert.DictConvert;

@Schema(description = "管理后台 - 专家信息 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ExpertInfoRespVO {

    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29963")
    @ExcelProperty("主键ID")
    private Long id;

    @Schema(description = "专家姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
    @ExcelProperty("专家姓名")
    private String expertName;

    @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("性别")
    private String gender;

    @Schema(description = "政治面貌", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "政治面貌", converter = DictConvert.class)
    @DictFormat("expert_political_aspects") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String politicalStatus;

    @Schema(description = "电话", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("电话")
    private String phone;

    @Schema(description = "职业状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "职业状态", converter = DictConvert.class)
    @DictFormat("expert_professional_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private String jobStatus;

    @Schema(description = "现任/原任职务", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("现任/原任职务")
    private String currentOrFormerTitle;

    @Schema(description = "身份证号/护照号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("身份证号/护照号")
    private String idOrPassport;

    @Schema(description = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED, example = "19485")
    @ExcelProperty("银行卡号")
    private String bankAccount;

    @Schema(description = "开户行", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
    @ExcelProperty("开户行")
    private String bankName;

    @Schema(description = "专业技术职称/职业资格")
    @ExcelProperty("专业技术职称/职业资格")
    private String professionalTitle;

    @Schema(description = "主要成果奖励、荣誉称号、出版著作、授权专利等", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("主要成果奖励、荣誉称号、出版著作、授权专利等")
    private String majorAchievements;

    @Schema(description = "国内外主要学术组织、社会团体及其他智库兼职情况", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("国内外主要学术组织、社会团体及其他智库兼职情况")
    private String academicSocietyRoles;

    @Schema(description = "专业、熟悉领域", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("专业、熟悉领域")
    private String specialties;

    @Schema(description = "学术、学历背景", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("学术、学历背景")
    private String academicBackground;

    @Schema(description = "专业经验-年", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("专业经验-年")
    private String yearsOfExperience;

    @Schema(description = "专业影响力", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("专业影响力")
    private String professionalInfluence;

    @Schema(description = "主要学习和工作经历", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("主要学习和工作经历")
    private String workAndStudyExperience;

    @Schema(description = "主要成绩")
    @ExcelProperty("主要成绩")
    private String mainContributions;

    @Schema(description = "专家头衔", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("专家头衔")
    private String expertTitle;

    @Schema(description = "入库日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("入库日期")
    private String entryDate;

    @Schema(description = "民族")
    @ExcelProperty("民族")
    private String ethnicity;

    @Schema(description = "籍贯")
    @ExcelProperty("籍贯")
    private String birthplace;

    @Schema(description = "现工作单位及职务")
    @ExcelProperty("现工作单位及职务")
    private String currentWorkplace;

    @Schema(description = "通讯地址")
    @ExcelProperty("通讯地址")
    private String address;

    @Schema(description = "电子邮箱")
    @ExcelProperty("电子邮箱")
    private String email;

    @Schema(description = "毕业院校及专业-在职")
    @ExcelProperty("毕业院校及专业-在职")
    private String graduatedSchool;

    @Schema(description = "备注")
    @ExcelProperty("备注")
    private String remarks;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

}