package com.aps.macroplanner.data;

/**
 * KPI 权重配置 — 对应 Quintiq 中的 KPIWeightMacroPlan
 * 定义每个 KPI 的优化层级和权重
 */
public class KPIWeights {
    // 非财务 KPI 权重
    private final double fulfillmentWeight;
    private final double lotSizeWeight;
    private final double maxInventoryLevelWeight;
    private final double minInventoryLevelWeight;
    private final double targetInventoryLevelWeight;
    private final double unitCapacityWeight;
    private final double supplyTargetWeight;
    private final double minSupplyWeight;
    private final double maxSupplyWeight;
    private final double salesDemandPriorityWeight;
    private final double postponementPenaltyWeight;
    private final double processMaxQuantityWeight;

    public KPIWeights(double fulfillmentWeight, double lotSizeWeight,
                      double maxInventoryLevelWeight, double minInventoryLevelWeight,
                      double targetInventoryLevelWeight, double unitCapacityWeight,
                      double supplyTargetWeight, double minSupplyWeight,
                      double maxSupplyWeight, double salesDemandPriorityWeight,
                      double postponementPenaltyWeight, double processMaxQuantityWeight) {
        this.fulfillmentWeight = fulfillmentWeight;
        this.lotSizeWeight = lotSizeWeight;
        this.maxInventoryLevelWeight = maxInventoryLevelWeight;
        this.minInventoryLevelWeight = minInventoryLevelWeight;
        this.targetInventoryLevelWeight = targetInventoryLevelWeight;
        this.unitCapacityWeight = unitCapacityWeight;
        this.supplyTargetWeight = supplyTargetWeight;
        this.minSupplyWeight = minSupplyWeight;
        this.maxSupplyWeight = maxSupplyWeight;
        this.salesDemandPriorityWeight = salesDemandPriorityWeight;
        this.postponementPenaltyWeight = postponementPenaltyWeight;
        this.processMaxQuantityWeight = processMaxQuantityWeight;
    }

    public double getFulfillmentWeight() { return fulfillmentWeight; }
    public double getLotSizeWeight() { return lotSizeWeight; }
    public double getMaxInventoryLevelWeight() { return maxInventoryLevelWeight; }
    public double getMinInventoryLevelWeight() { return minInventoryLevelWeight; }
    public double getTargetInventoryLevelWeight() { return targetInventoryLevelWeight; }
    public double getUnitCapacityWeight() { return unitCapacityWeight; }
    public double getSupplyTargetWeight() { return supplyTargetWeight; }
    public double getMinSupplyWeight() { return minSupplyWeight; }
    public double getMaxSupplyWeight() { return maxSupplyWeight; }
    public double getSalesDemandPriorityWeight() { return salesDemandPriorityWeight; }
    public double getPostponementPenaltyWeight() { return postponementPenaltyWeight; }
    public double getProcessMaxQuantityWeight() { return processMaxQuantityWeight; }
}