package com.sifang.modules.customer.constant;

import java.util.Optional;
import java.util.stream.Stream;

/**
 * 首次进件状态映射
 */
public enum HRFirstStateKM {

    /**
     * 进件状态
     * NS:数据不存在
     * RJ:拒绝
     * JD：建档开始
     * FR：建档审核中
     * FA：建档审核通过
     * FS：建档待补充资料
     * JT：建档审核提交完成
     * FT:一次进件完成（建档审核通过通过）
     * ST:二次进件完成
     * DS:待补充资料
     * MR:人工审核中
     * CS:确认单已生成（初始化通过）
     * PR:审批通过
     * LS:已完成放款
     * CL: 废止
     * FZ:废止中
     */


    Pending("数据不存在", "NS", 4, "NS"),
    AuditFailed("拒绝", "RJ", 7, "RJ"),
    PreAudit("建档开始", "JD", 5, "JD"),
    Auditing("建档审核中", "FR", 5, "FR"),
    Auditing2("建档审核通过待一次进件审核", "FR", 5, "FA"),
    AuditFailed2("建档待补充资料", "FS", 24, "FS"),
    InProgress("建档审核提交完成", "JT", 5, "JT"),
    Success("一次进件完成", "FT", 6, "FT"),
    Fail("废止", "CL", 7, "CL");

    private String name;//状态名称
    private Integer internalCode;//内部编码
    private String externalCode;//外部编码
    private String code;

    public String getName() {
        return name;
    }

    public Integer getInternalCode() {
        return internalCode;
    }

    public String getExternalCode() {
        return externalCode;
    }

    public String getCode(){
        return code;
    }

    private HRFirstStateKM(String name, String code, Integer internalCode, String externalCode){
        this.name = name;
        this.code = code;
        this.internalCode = internalCode;
        this.externalCode = externalCode;
    }

    public static HRFirstStateKM externalOf(String externalCode){
        return Optional.ofNullable(externalCode)
                .map(v -> Stream.of(values())
                        .filter(s -> s.externalCode.equals(v))
                        .findFirst()
                        .orElse(null))
                .orElse(null);
    }
}
