package com.fs.erp.constant;

import lombok.Getter;

/**
 * 订单状态枚举类
 */
@Getter
public enum ErpQueryOrderStatusEnum {

    /**
     * 待付款
     */
    WAIT_PAY("WaitPay", "待付款"),

    /**
     * 发货中
     */
    DELIVERING("Delivering", "发货中"),

    /**
     * 被合并
     */
    MERGED("Merged", "被合并"),

    /**
     * 异常
     */
    QUESTION("Question", "异常"),

    /**
     * 被拆分
     */
    SPLIT("Split", "被拆分"),

    /**
     * 等供销商|外仓发货
     */
    WAIT_OUTER_SENT("WaitOuterSent", "等供销商|外仓发货"),

    /**
     * 已付款待审核
     */
    WAIT_CONFIRM("WaitConfirm", "已付款待审核"),

    /**
     * 已客审待财审
     */
    WAIT_FCONFIRM("WaitFConfirm", "已客审待财审"),

    /**
     * 已发货
     */
    SENT("Sent", "已发货"),

    /**
     * 取消
     */
    CANCELLED("Cancelled", "取消");

    /**
     * 状态码
     */
    private final String code;

    /**
     * 状态描述
     */
    private final String description;

    /**
     * 构造方法
     *
     * @param code        状态码
     * @param description 状态描述
     */
    ErpQueryOrderStatusEnum(String code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 根据状态码获取对应的枚举值
     *
     * @param code 状态码
     * @return 对应的枚举值，若未找到则返回null
     */
    public static ErpQueryOrderStatusEnum getByCode(String code) {
        for (ErpQueryOrderStatusEnum status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }

    /**
     * 判断给定的状态码是否有效
     *
     * @param code 状态码
     * @return 若有效返回true，否则返回false
     */
    public static boolean isValidCode(String code) {
        return getByCode(code) != null;
    }

    @Override
    public String toString() {
        return this.code + ":" + this.description;
    }
}
