package cn.superdesk.uniorder.common.enums.common;

import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description: 定义:用于标记 业务线(服务也好,第三方系统也罢) 过来的订单流, 也可以想象为"谁"最原始产生的, 用于标志这个"谁"
 * 目前 key 的作用是 商城过来的 订单有 order_type 有些老业务有用
 * 以后 key 计划弃用
 * 统一用 serviceNo
 * @Author: linjinyu
 * @CreateDate: 8/6/20 6:40 PM
 * @UpdateUser: linjinyu
 * @UpdateDate: 8/6/20 6:40 PM
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public enum CommonServiceNoEnum {

    UNKNOW(-1, "UNKNOW", "未知类型"),

    服务之窗(2, "SUPER", "服务之窗"),
    楼闪送(21, "LNSS", "楼闪送"),

    企业福利(3, "FLSC", "企业福利"),
    企业福利_侨城汇(31, "FLSC_QCH", "企业福利"),
    // 第三方推送对账单 + 中间 换转 处理 对账单 - 所得
    // 第三方推送订单 同步 处理 订单 - 所得
    企业商城_侨城汇(32, "QYSC_QCH", "企业商城"),

    企业采购(4, "QYNG", "企业采购"),

    // 代客下单 新的订单类型 add at 20210512 mark by linjinyu
    // TODO 20200601 要求 "DKXD" 变成 "QYNG"
    // TODO 20200601 要求 "代客下单" 变成 "企业采购"
    代客下单(5, "DKXD", "代客下单"),

    企业采购_代客(51, "SUBMIT", "企业采购(代客)"),
    企业福利_代客(52, "SUBCW", "企业福利(代客)"),
    企业差旅(53, "SUBCT", "企业差旅"),
    企业饭卡(54, "SUBMC", "企业饭卡"),
    信息技术服务(55, "SUBIT", "信息技术服务"),
    平台服务(56, "SUBPS", "平台服务"),


    ;

    /**
     * 也是对映的 order_type
     */
    private Integer serviceId;
    private String  serviceNo;
    private String  serviceName;

    CommonServiceNoEnum(Integer key, String serviceNo, String serviceName) {
        this.serviceId = key;
        this.serviceNo = serviceNo;
        this.serviceName = serviceName;
    }

    public Integer getServiceId() {
        return serviceId;
    }

    public String getServiceNo() {
        return serviceNo;
    }

    public String getServiceName() {
        return serviceName;
    }

    public static String getServiceNoByServiceId(Integer key) {
        for (CommonServiceNoEnum c : CommonServiceNoEnum.values()) {
            if (c.serviceId.equals(key)) {
                return c.getServiceNo();
            }
        }
        return UNKNOW.getServiceNo();
    }

    public static String getServiceNameByServiceId(Integer key) {
        for (CommonServiceNoEnum c : CommonServiceNoEnum.values()) {
            if (c.serviceId.equals(key)) {
                return c.getServiceName();
            }
        }
        return UNKNOW.getServiceName();
    }

    public static CommonServiceNoEnum getByServiceNo(String serviceNo) {
        for (CommonServiceNoEnum commonServiceEnum : CommonServiceNoEnum.values()) {
            if (commonServiceEnum.serviceNo.equals(serviceNo)) {
                return commonServiceEnum;
            }
        }
        return CommonServiceNoEnum.UNKNOW;
    }

    public static CommonServiceNoEnum getByServiceId(Integer serviceId) {
        return LOOKUP.get(serviceId);
    }

    private static final Map<Integer, CommonServiceNoEnum> LOOKUP = new HashMap<>();


    private static final Map<Integer, CommonServiceNoEnum> LOOK_UP_DKXD = new HashMap<>();

    static {
        for (CommonServiceNoEnum s : EnumSet.allOf(CommonServiceNoEnum.class)) {
            LOOKUP.put(s.getServiceId(), s);
        }
    }

}
