package org.icepear.echarts.charts.bar3D;

import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.icepear.echarts.origin.chart.bar.*;
import org.icepear.echarts.origin.component.marker.MarkAreaOption;
import org.icepear.echarts.origin.component.marker.MarkLineOption;
import org.icepear.echarts.origin.component.marker.MarkPointOption;
import org.icepear.echarts.origin.util.LabelLayoutOption;
import org.icepear.echarts.origin.util.LabelLineOption;
import org.icepear.echarts.origin.util.OptionEncode;

import java.util.Map;

/**
 * @author hongawen
 * @version 1.0.0
 * @date 2023年06月25日 15:14
 */

@Accessors(chain = true)
@Data
public class Bar3DSeries implements BarSeriesOption {

    private String mainType;

    private String type = "bar3D";

    @Setter(AccessLevel.NONE)
    private Object id;

    public Bar3DSeries setId(Number id) {
        this.id = id;
        return this;
    }

    public Bar3DSeries setId(String id) {
        this.id = id;
        return this;
    }

    @Setter(AccessLevel.NONE)
    private Object name;

    public Bar3DSeries setName(Number name) {
        this.name = name;
        return this;
    }

    public Bar3DSeries setName(String name) {
        this.name = name;
        return this;
    }

    private Number z;

    private Number zlevel;

    private Boolean animation;

    private Number animationThreshold;

    @Setter(AccessLevel.NONE)
    private Object animationDuration;

    public Bar3DSeries setAnimationDuration(Number animationDuration) {
        this.animationDuration = animationDuration;
        return this;
    }

    public Bar3DSeries setAnimationDuration(Object animationDuration) {
        this.animationDuration = animationDuration;
        return this;
    }

    private Object animationEasing;

    @Setter(AccessLevel.NONE)
    private Object animationDelay;

    public Bar3DSeries setAnimationDelay(Number animationDelay) {
        this.animationDelay = animationDelay;
        return this;
    }

    public Bar3DSeries setAnimationDelay(Object animationDelay) {
        this.animationDelay = animationDelay;
        return this;
    }

    @Setter(AccessLevel.NONE)
    private Object animationDurationUpdate;

    public Bar3DSeries setAnimationDurationUpdate(Number animationDurationUpdate) {
        this.animationDurationUpdate = animationDurationUpdate;
        return this;
    }

    public Bar3DSeries setAnimationDurationUpdate(Object animationDurationUpdate) {
        this.animationDurationUpdate = animationDurationUpdate;
        return this;
    }

    private Object animationEasingUpdate;

    @Setter(AccessLevel.NONE)
    private Object animationDelayUpdate;

    public Bar3DSeries setAnimationDelayUpdate(Number animationDelayUpdate) {
        this.animationDelayUpdate = animationDelayUpdate;
        return this;
    }

    public Bar3DSeries setAnimationDelayUpdate(Object animationDelayUpdate) {
        this.animationDelayUpdate = animationDelayUpdate;
        return this;
    }

    @Setter(AccessLevel.NONE)
    private Object color;

    public Bar3DSeries setColor(String color) {
        this.color = color;
        return this;
    }

    public Bar3DSeries setColor(String[] color) {
        this.color = color;
        return this;
    }

    private String[][] colorLayer;

    @Setter(AccessLevel.NONE)
    private Object emphasis;

    public Bar3DSeries setEmphasis(BarEmphasisOption emphasis) {
        this.emphasis = emphasis;
        return this;
    }

    public Bar3DSeries setEmphasis(Object emphasis) {
        this.emphasis = emphasis;
        return this;
    }

    private Object select;

    private Object blur;

    private MarkAreaOption markArea;

    private MarkLineOption markLine;

    private MarkPointOption markPoint;

    private Object tooltip;

    private Boolean silent;

    private String blendMode;

    private String cursor;

    @Setter(AccessLevel.NONE)
    private Object dataGroupId;

    public Bar3DSeries setDataGroupId(Number dataGroupId) {
        this.dataGroupId = dataGroupId;
        return this;
    }

    public Bar3DSeries setDataGroupId(String dataGroupId) {
        this.dataGroupId = dataGroupId;
        return this;
    }

    @Setter(AccessLevel.NONE)
    private Object data;

    public Bar3DSeries setData(BarDataItemOption[] data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(Number[] data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(Number[][] data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(Object data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(Object[] data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(Object[][] data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(String[] data) {
        this.data = data;
        return this;
    }

    public Bar3DSeries setData(String[][] data) {
        this.data = data;
        return this;
    }

    private String colorBy;

    private Boolean legendHoverLink;

    @Setter(AccessLevel.NONE)
    private Object progressive;

    public Bar3DSeries setProgressive(Boolean progressive) {
        this.progressive = progressive;
        return this;
    }

    public Bar3DSeries setProgressive(Number progressive) {
        this.progressive = progressive;
        return this;
    }

    private Number progressiveThreshold;

    private String progressiveChunkMode;

    private String coordinateSystem;

    private Number hoverLayerThreshold;

    @Setter(AccessLevel.NONE)
    private Object seriesLayoutBy;

    public Bar3DSeries setSeriesLayoutBy(Object seriesLayoutBy) {
        this.seriesLayoutBy = seriesLayoutBy;
        return this;
    }

    public Bar3DSeries setSeriesLayoutBy(String seriesLayoutBy) {
        this.seriesLayoutBy = seriesLayoutBy;
        return this;
    }

    private LabelLineOption labelLine;

    private LabelLayoutOption labelLayout;

    private Object stateAnimation;

    @Setter(AccessLevel.NONE)
    private Object universalTransition;

    public Bar3DSeries setUniversalTransition(Boolean universalTransition) {
        this.universalTransition = universalTransition;
        return this;
    }

    public Bar3DSeries setUniversalTransition(Object universalTransition) {
        this.universalTransition = universalTransition;
        return this;
    }

    private Map<String, Boolean> selectedMap;

    @Setter(AccessLevel.NONE)
    private Object selectedMode;

    public Bar3DSeries setSelectedMode(Boolean selectedMode) {
        this.selectedMode = selectedMode;
        return this;
    }

    public Bar3DSeries setSelectedMode(String selectedMode) {
        this.selectedMode = selectedMode;
        return this;
    }

    private Number xAxisIndex;

    private Number yAxisIndex;

    private String xAxisId;

    private String yAxisId;

    private Number polarIndex;

    private String polarId;

    private Number barMinHeight;

    private Number barMinAngle;

    private Number barMaxWidth;

    private Number barMinWidth;

    @Setter(AccessLevel.NONE)
    private Object barWidth;

    public Bar3DSeries setBarWidth(Number barWidth) {
        this.barWidth = barWidth;
        return this;
    }

    public Bar3DSeries setBarWidth(String barWidth) {
        this.barWidth = barWidth;
        return this;
    }

    @Setter(AccessLevel.NONE)
    private Object barGap;

    public Bar3DSeries setBarGap(Number barGap) {
        this.barGap = barGap;
        return this;
    }

    public Bar3DSeries setBarGap(String barGap) {
        this.barGap = barGap;
        return this;
    }

    @Setter(AccessLevel.NONE)
    private Object barCategoryGap;

    public Bar3DSeries setBarCategoryGap(Number barCategoryGap) {
        this.barCategoryGap = barCategoryGap;
        return this;
    }

    public Bar3DSeries setBarCategoryGap(String barCategoryGap) {
        this.barCategoryGap = barCategoryGap;
        return this;
    }

    private Boolean large;

    private Number largeThreshold;

    private BarItemStyleOption itemStyle;

    private BarLabelOption label;

    private String stack;

    private String sampling;

    private Number datasetIndex;

    @Setter(AccessLevel.NONE)
    private Object datasetId;

    public Bar3DSeries setDatasetId(Number datasetId) {
        this.datasetId = datasetId;
        return this;
    }

    public Bar3DSeries setDatasetId(String datasetId) {
        this.datasetId = datasetId;
        return this;
    }

    private Object sourceHeader;

    private Object[] dimensions;

    private OptionEncode encode;

    private Boolean clip;

    private Boolean roundCap;

    private Boolean showBackground;

    private BarBackgroundStyleOption backgroundStyle;

    private Boolean realtimeSort;

    private String shading;
}
