import { IgrSizeScale } from "./igr-size-scale";
import { IgrBrushScale } from "./igr-brush-scale";
import { IgrScatterBase } from "./igr-scatter-base";
import { BubbleSeries } from "./BubbleSeries";
import { ensureBool } from "igniteui-react-core";
/**
 * Represents a IgxDataChartComponent bubble series.
*/
export class IgrBubbleSeries extends IgrScatterBase {
    createImplementation() {
        return new BubbleSeries();
    }
    /**
                                 * @hidden
                                 */
    get i() {
        return this._implementation;
    }
    constructor(props) {
        super(props);
    }
    /**
     * Gets whether the series has only marker as visuals
    */
    get hasOnlyMarkers() {
        return this.i.dx;
    }
    /**
     * Gets or sets the radius mapping property for the current series object.
    */
    get radiusMemberPath() {
        return this.i.aaj;
    }
    set radiusMemberPath(v) {
        this.i.aaj = v;
    }
    /**
     * Gets or sets the radius size scale for the bubbles.
    */
    get radiusScale() {
        const r = this.i.zj;
        if (r == null) {
            return null;
        }
        if (!r.externalObject) {
            let e = IgrSizeScale._createFromInternal(r);
            if (e) {
                e._implementation = r;
            }
            r.externalObject = e;
        }
        return r.externalObject;
    }
    set radiusScale(v) {
        if (v != null && this._stylingContainer && v._styling)
            v._styling(this._stylingContainer, this, this);
        v == null ? this.i.zj = null : this.i.zj = v.i;
    }
    /**
     * Gets or sets the Label mapping property for the current series object.
    */
    get labelMemberPath() {
        return this.i.z9;
    }
    set labelMemberPath(v) {
        this.i.z9 = v;
    }
    /**
     * Gets or sets the fill mapping property for the current series object.
    */
    get fillMemberPath() {
        return this.i.z4;
    }
    set fillMemberPath(v) {
        this.i.z4 = v;
    }
    /**
     * Gets or sets the brush scale for the fill brush of markers.
    */
    get fillScale() {
        const r = this.i.zg;
        if (r == null) {
            return null;
        }
        if (!r.externalObject) {
            let e = IgrBrushScale._createFromInternal(r);
            if (e) {
                e._implementation = r;
            }
            r.externalObject = e;
        }
        return r.externalObject;
    }
    set fillScale(v) {
        if (v != null && this._stylingContainer && v._styling)
            v._styling(this._stylingContainer, this, this);
        v == null ? this.i.zg = null : this.i.zg = v.i;
    }
    /**
     * Gets or sets whether or not the FillScale uses global min/max values of FillMemberPath from multiple series.
     * This setting applies only if multiple series are using the same FillScale.
    */
    get fillScaleUseGlobalValues() {
        return this.i.zr;
    }
    set fillScaleUseGlobalValues(v) {
        this.i.zr = ensureBool(v);
    }
    /**
     * Gets or sets whether or not the marker outline should use FillScale like the marker fill does.
     * This setting applies only if the current series has a FillScale set and it overrides MarkerOutline setting.
    */
    get markerOutlineUsesFillScale() {
        return this.i.zs;
    }
    set markerOutlineUsesFillScale(v) {
        this.i.zs = ensureBool(v);
    }
    /**
     * Gets or sets brightness of the marker outline. Using negative value will change marker outline to darker color and positive value will change marker outline to brighter color
     * Note you can use any values between minimum value of -1 (darkest outline) and maximum value of 1 (brightest outline)
    */
    get markerOutlineBrightness() {
        return this.i.zy;
    }
    set markerOutlineBrightness(v) {
        this.i.zy = +v;
    }
    /**
     * Gets or sets brightness of the marker fill. Using negative value will change marker fill to darker color and positive value will change marker fill to brighter color
     * Note you can use any values between minimum value of -1 (darkest fill) and maximum value of 1 (brightest fill)
    */
    get markerBrushBrightness() {
        return this.i.zx;
    }
    set markerBrushBrightness(v) {
        this.i.zx = +v;
    }
    /**
     * Gets or sets the whether or not the RadiusScale uses global values of RadiusMemberPath from multiple series.
     * This setting applies only if multiple series are using the same RadiusScale.
    */
    get radiusScaleUseGlobalValues() {
        return this.i.zt;
    }
    set radiusScaleUseGlobalValues(v) {
        this.i.zt = ensureBool(v);
    }
    /**
     * Gets or sets the label displayed before series' radius value in the Data Legend.
    */
    get radiusMemberAsLegendLabel() {
        return this.i.aaf;
    }
    set radiusMemberAsLegendLabel(v) {
        this.i.aaf = v;
    }
    /**
     * Gets or sets the label displayed before series' fill value in the Data Legend.
    */
    get fillMemberAsLegendLabel() {
        return this.i.z0;
    }
    set fillMemberAsLegendLabel(v) {
        this.i.z0 = v;
    }
    /**
     * Gets or sets the unit displayed after series' radius value in the Data Legend.
    */
    get radiusMemberAsLegendUnit() {
        return this.i.aah;
    }
    set radiusMemberAsLegendUnit(v) {
        this.i.aah = v;
    }
    /**
     * Gets or sets the unit displayed after series' fill value in the Data Legend.
    */
    get fillMemberAsLegendUnit() {
        return this.i.z2;
    }
    set fillMemberAsLegendUnit(v) {
        this.i.z2 = v;
    }
    findByName(name) {
        var baseResult = super.findByName(name);
        if (baseResult) {
            return baseResult;
        }
        if (this.radiusScale && this.radiusScale.name && this.radiusScale.name == name) {
            return this.radiusScale;
        }
        if (this.fillScale && this.fillScale.name && this.fillScale.name == name) {
            return this.fillScale;
        }
        return null;
    }
    _styling(container, component, parent) {
        super._styling(container, component, parent);
        this._inStyling = true;
        if (this.radiusScale && this.radiusScale._styling) {
            this.radiusScale._styling(container, component, this);
        }
        if (this.fillScale && this.fillScale._styling) {
            this.fillScale._styling(container, component, this);
        }
        this._inStyling = false;
    }
    getItemValue(item, memberPathName) {
        let iv = this.i.ju(item, memberPathName);
        return (iv);
    }
}
