package com.neotel.webbox.capacity.box;

import com.neotel.webbox.capacity.bean.BoxData;
import com.neotel.webbox.capacity.bean.ReelItem;
import lombok.Getter;
import lombok.Setter;

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

@Getter
@Setter
public class Box {

    /**
     * 标准列数量
     */
    private int columnCount;

    /**
     * 标准列
     */
    private Column column;

    private Column doorUp;

    private Column doorDown;

    public static Box newBox(BoxData boxData,int maxPressHeight){
        int validColumnHeight = boxData.getColumnValidHeight(maxPressHeight);
        int doorUpValidHeight = boxData.getDoorUpValidHeight(maxPressHeight);
        int doorDownValidHeight = boxData.getDoorDownValidHeight(maxPressHeight);

        Box box = new Box();
        Column doorDown = new Column(doorDownValidHeight);
        box.setDoorDown(doorDown);

        Column doorUp = new Column(doorUpValidHeight);
        box.setDoorUp(doorUp);

        Column column = new Column(validColumnHeight);
        box.setColumn(column);

        box.setColumnCount(boxData.getColumnCount());
        return box;
    }

    /**
     * 获取料仓的容量明细
     */
    public Map<String, ReelItem> getCapacity(){
        Map<String,ReelItem> capacityMap = new HashMap<>();

        for (int i = 0; i < getColumnCount(); i++) {
            capacityMap = addToMap(capacityMap, column.getColumnCapacity());
        }
        capacityMap = addToMap(capacityMap, doorDown.getColumnCapacity());
        capacityMap = addToMap(capacityMap, doorUp.getColumnCapacity());
        return capacityMap;
    }

    private Map<String,ReelItem> addToMap(Map<String,ReelItem> capacityMap,Map<String,ReelItem> columnMap){
        for (Map.Entry<String, ReelItem> entry : columnMap.entrySet()) {
            String sizeStr = entry.getKey();
            ReelItem capacityItem = capacityMap.get(sizeStr);
            if(capacityItem == null){
                capacityItem = new ReelItem();
                capacityItem.setW(entry.getValue().getW());
                capacityItem.setH(entry.getValue().getH());
            }
            int capacity = capacityItem.getCapacity() + entry.getValue().getCapacity();
            capacityItem.setCapacity(capacity);
            capacityMap.put(sizeStr,capacityItem);
        }
        return capacityMap;
    }


}