package com.wms_main.model.bo.wms;

import com.wms_main.constant.enums.wms.WmsDepthStrategyEnums;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 深度策略分析结果
 * 包含深度分析的详细信息和执行计划
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DepthStrategyResult {
    
    /**
     * 应用的策略类型
     */
    private WmsDepthStrategyEnums strategy;
    
    /**
     * 目标货物的深度
     */
    private Integer targetDepth;
    
    /**
     * 需要移库的深度列表（从小到大排序）
     */
    private List<Integer> transferDepths;
    
    /**
     * 策略执行的详细步骤说明
     */
    private List<String> executionSteps;
    
    /**
     * 预估的任务数量
     */
    private Integer estimatedTaskCount;
    
    /**
     * 策略的复杂度评分（1-10，10最复杂）
     */
    private Integer complexityScore;
    
    /**
     * 是否需要临时库位
     */
    private Boolean needTempLocation;
    
    /**
     * 策略分析的详细备注
     */
    private String remark;
    
    /**
     * 创建直接出库策略结果
     * @param remark 备注信息
     * @return 直接出库策略结果
     */
    public static DepthStrategyResult createDirectOut(String remark) {
        DepthStrategyResult result = new DepthStrategyResult();
        result.setStrategy(WmsDepthStrategyEnums.DIRECT_OUT);
        result.setTargetDepth(1);
        result.setTransferDepths(List.of());
        result.setExecutionSteps(List.of("直接生成出库任务"));
        result.setEstimatedTaskCount(1);
        result.setComplexityScore(1);
        result.setNeedTempLocation(false);
        result.setRemark(remark);
        return result;
    }
    
    /**
     * 创建单层移库策略结果
     * @param remark 备注信息
     * @return 单层移库策略结果
     */
    public static DepthStrategyResult createSingleTransfer(String remark) {
        DepthStrategyResult result = new DepthStrategyResult();
        result.setStrategy(WmsDepthStrategyEnums.SINGLE_TRANSFER);
        result.setTargetDepth(2);
        result.setTransferDepths(List.of(1));
        result.setExecutionSteps(List.of("1. 生成深度1移库任务", "2. 生成深度2出库任务"));
        result.setEstimatedTaskCount(2);
        result.setComplexityScore(3);
        result.setNeedTempLocation(true);
        result.setRemark(remark);
        return result;
    }
    
    /**
     * 创建双层移库策略结果
     * @param remark 备注信息
     * @return 双层移库策略结果
     */
    public static DepthStrategyResult createDoubleTransfer(String remark) {
        DepthStrategyResult result = new DepthStrategyResult();
        result.setStrategy(WmsDepthStrategyEnums.DOUBLE_TRANSFER);
        result.setTargetDepth(3);
        result.setTransferDepths(List.of(1, 2));
        result.setExecutionSteps(List.of("1. 生成深度1移库任务", "2. 生成深度2移库任务", "3. 生成深度3出库任务"));
        result.setEstimatedTaskCount(3);
        result.setComplexityScore(6);
        result.setNeedTempLocation(true);
        result.setRemark(remark);
        return result;
    }

    public static DepthStrategyResult createError(String remark) {
        return new DepthStrategyResult(WmsDepthStrategyEnums.NO_ACTION, 0,
                List.of(), List.of(remark), 0, 0, false, remark);
    }
}