package com.hz.pm.api.meta.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 所有的专家字典类型
 * </p>
 *
 * @author WendyYang
 * @since 13:50 2023/12/21
 */
@Getter
@AllArgsConstructor
public enum DictTypeEnum {

    /**
     * 政治面貌
     */
    POLITICAL("political"),
    /**
     * 专家来源
     */
    EXPERT_SOURCE("expert_source"),
    /**
     * 学历
     */
    EDU("edu"),
    /**
     * 学位
     */
    DEGREE("degree"),
    /**
     * 在职状态
     */
    JOB_STATUS("job_status"),
    /**
     * 行政职级
     */
    ADMINISTRATIVE_RANK("administrative_rank"),
    /**
     * 专家类型
     */
    EXPERT_TYPE("expert_type"),
    /**
     * 专家领域
     */
    EXPERT_AREA("expert_area"),
    /**
     * 专家专业特长
     */
    EXPERT_SPECIALTY("expert_specialty"),
    /**
     * 专家级别
     */
    EXPERT_LEVEL("expert_level"),
    /**
     * 所属专家库
     */
    EXPERT_LIBRARY("expert_library"),
    /**
     * 单位类型
     */
    COMPANY_ATTRIBUTE("company_attribute"),
    /**
     * 职称级别
     */
    TITLE_LEVEL("title_level"),
    /**
     * 通知类型
     */
    NOTICE_TYPE("notice_type"),
    /**
     * 会议类型
     */
    MEETING_TYPE("meeting_type");

    private final String key;

    public static final List<String> ALL;

    static {
        List<String> tmpKeys = Arrays.stream(values())
                .map(DictTypeEnum::getKey)
                .collect(Collectors.toList());
        ALL = Collections.unmodifiableList(tmpKeys);
    }

    public static boolean contains(String key) {
        return ALL.contains(key);
    }

    public static DictTypeEnum of(String key) {
        return Arrays.stream(values())
                .filter(w -> w.getKey().equals(key))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("字典类型无效：" + key));
    }


}
