package net.northking.cctp.dw.dto;

import io.swagger.annotations.ApiModel;
import lombok.Data;

import java.util.HashMap;

@Data
@ApiModel("坐标轴传输数据对象")
public class AxesDto {
    private static final long serialVersionUID = 1L;

    private HashMap<String, HashMap<String, Long>> axesData = new HashMap<>();//坐标容器

    /**
     * 横坐标含义
     */
    private String XName;

    /**
     * 纵坐标含义
     */
    private String YName;

    /**
     * 根据 X Y 坐标获取值
     *
     * @param x
     * @param y
     * @return
     */
    public Long getValue(String x, String y) {
        HashMap<String, Long> XColumnMap = axesData.get(x);
        if (XColumnMap == null) {
            return null;
        }
        Long aLong = XColumnMap.get(y);
        return aLong;
    }

    /**
     * 根据 X  坐标增加一列值
     *
     * @param x
     * @param y
     * @param value
     */
    public void setValue(String x, String y, Long value) {
        HashMap<String, Long> XColumnMap = axesData.get(x);
        if (XColumnMap == null) {
            XColumnMap = new HashMap<>();
            this.setXColumnMap(x, XColumnMap);
        }
        XColumnMap.put(y, value);
    }

    /**
     * 根据 X Y 坐标增加指定值
     *
     * @param x
     * @param y
     * @param value
     */
    public void addValue(String x, String y, Long value) {
        HashMap<String, Long> XColumnMap = axesData.get(x);
        Long aValue = 0L;
        if (XColumnMap == null) {
            XColumnMap = new HashMap<>();
            this.setXColumnMap(x, XColumnMap);
        } else {
            aValue = XColumnMap.get(y) == null ? 0L : XColumnMap.get(y);
        }
        XColumnMap.put(y, aValue + value);
    }

    /**
     * 根据 X Y 坐标增加 1
     *
     * @param x
     * @param y
     */
    public void addValue(String x, String y) {
        addValue(x, y, 1L);
    }

    /**
     * 根据 X Y 坐标减少指定值
     *
     * @param x
     * @param y
     * @param value
     */
    public void minusValue(String x, String y, Long value) {
        HashMap<String, Long> XColumnMap = axesData.get(x);
        Long aValue = 0L;
        if (XColumnMap == null) {
            XColumnMap = new HashMap<>();
            this.setXColumnMap(x, XColumnMap);
        } else {
            aValue = XColumnMap.get(y) == null ? 0L : XColumnMap.get(y);
        }
        XColumnMap.put(y, aValue - value);
    }

    /**
     * 根据 X Y 坐标减少1
     *
     * @param x
     * @param y
     */
    public void minusValue(String x, String y) {
        minusValue(x, y, 1L);
    }

    /**
     * 根据 X Y 坐标减少1
     *
     * @param x
     */
    public void setXColumnMap(String x, HashMap XColumnMap) {
        axesData.put(x, XColumnMap);
    }
}
