package com.red.circle.other.inner.enums.material;

import com.red.circle.tool.core.text.StringUtils;
import java.util.Arrays;
import java.util.Objects;

/**
 * 贵族VIP类型枚举
 *
 * @author houyong on 2021/1/12
 */
public enum SysNobleVipTypeEnum {

  /**
   * 子爵.
   */
  VISCOUNT("VISCOUNT", "子爵"),

  /**
   * 伯爵.
   */
  EARL("EARL", "伯爵"),

  /**
   * 侯爵.
   */
  MARQUIS("MARQUIS", "侯爵"),

  /**
   * 公爵.
   */
  DUKE("DUKE", "公爵"),

  /**
   * 国王.
   */
  KING("KING", "国王"),

  /**
   * 皇帝.
   */
  EMPEROR("EMPEROR", "皇帝");

  private final String desc;
  private final String name;

  SysNobleVipTypeEnum(String name, String desc) {
    this.name = name;
    this.desc = desc;
  }

  public static String getDescValue(String name) {
    return Arrays.stream(SysNobleVipTypeEnum.values())
        .filter(sysNobleVipTypeEnum -> Objects.equals(sysNobleVipTypeEnum.getName(), name))
        .findFirst()
        .map(SysNobleVipTypeEnum::getDesc)
        .orElse(StringUtils.UNKNOWN);
  }

  public static String getValueByDesc(String name) {
    return Arrays.stream(SysNobleVipTypeEnum.values())
        .filter(sysNobleVipTypeEnum -> Objects.equals(sysNobleVipTypeEnum.getDesc(), name))
        .findFirst()
        .map(SysNobleVipTypeEnum::getName)
        .orElse(StringUtils.UNKNOWN);
  }

  /** 根据名称返回枚举对象，找不到返回 null */
  public static SysNobleVipTypeEnum getByName(String name) {
    return Arrays.stream(SysNobleVipTypeEnum.values())
            .filter(v -> Objects.equals(v.getName(), name))
            .findFirst()
            .orElse(null);
  }

  public String getDesc() {
    return desc;
  }

  public String getName() {
    return name;
  }
}
