package com.wms_main.constant.enums.wms;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 深度处理策略枚举
 * 用于定义不同深度库存的出库策略
 */
@Getter
@AllArgsConstructor
public enum WmsDepthStrategyEnums {
    
    /**
     * 直接出库策略
     * 适用于深度1的货物，无需移库操作
     */
    DIRECT_OUT(1, "直接出库", "货物位于深度1，可直接出库"),
    
    /**
     * 单层移库策略
     * 适用于深度2的货物，需要先移库深度1，再出深度2
     */
    SINGLE_TRANSFER(2, "单层移库", "先移库深度1，再出深度2"),
    
    /**
     * 双层移库策略
     * 适用于深度3的货物，需要先移库深度1和2，再出深度3
     */
    DOUBLE_TRANSFER(3, "双层移库", "先移库深度1和2，再出深度3"),
    
    /**
     * 复杂移库策略
     * 适用于复杂的深度组合情况
     */
    COMPLEX_TRANSFER(4, "复杂移库", "多个深度混合的复杂移库策略"),
    
    /**
     * 无需处理策略
     * 适用于无库存或其他特殊情况
     */
    NO_ACTION(0, "无需处理", "无库存或其他特殊情况");
    
    /**
     * 策略编码
     */
    private final Integer code;
    
    /**
     * 策略名称
     */
    private final String name;
    
    /**
     * 策略描述
     */
    private final String description;
    
    /**
     * 根据编码获取策略
     * @param code 策略编码
     * @return 对应的策略枚举
     */
    public static WmsDepthStrategyEnums getByCode(Integer code) {
        if (code == null) {
            return NO_ACTION;
        }
        for (WmsDepthStrategyEnums strategy : values()) {
            if (strategy.getCode().equals(code)) {
                return strategy;
            }
        }
        return NO_ACTION;
    }
}