/*
THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE  AGREEMENT ("AGREEMENT") LOCATED HERE:
https://www.infragistics.com/legal/license/igultimate-la
https://www.infragistics.com/legal/license/igultimate-eula
GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE:  you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company.
*/
import { List$1 } from "igniteui-react-core/ES2015/List$1";
import { FinancialChartIndicatorMenuItem } from "./FinancialChartIndicatorMenuItem";
import { OrderedDictionary$2 } from "./OrderedDictionary$2";
import { FinancialIndicatorType_$type } from "./FinancialIndicatorType";
import { FinancialOverlayType_$type } from "./FinancialOverlayType";
import { TrendLineType_$type } from "igniteui-react-core/ES2015/TrendLineType";
import { FinancialChartVolumeType_$type } from "./FinancialChartVolumeType";
import { Base, Type, String_$type, typeGetValue, fromEnum, markType, EnumUtil } from "igniteui-react-core/ES2015/type";
import { Dictionary$2 } from "igniteui-react-core/ES2015/Dictionary$2";
import { stringIsNullOrEmpty } from "igniteui-react-core/ES2015/string";
/**
 * @hidden
 */
export class FinancialChartIndicatorMenuItems extends List$1 {
    constructor(a) {
        super(FinancialChartIndicatorMenuItem.$, 0);
        this.ak = null;
        this.ac = null;
        this.ad = null;
        this.ae = null;
        this.af = null;
        this.ak = a;
        this.am(FinancialOverlayType_$type, this.al("FinancialChart_IndicatorMenu_OverlaysCategoryHeader", "Overlays"));
        this.am(TrendLineType_$type, this.al("FinancialChart_IndicatorMenu_TrendlinesCategoryHeader", "Trendlines"));
        this.am(FinancialChartVolumeType_$type, this.al("FinancialChart_IndicatorMenu_VolumeCategoryHeader", "Volume"));
        this.am(FinancialIndicatorType_$type, this.al("FinancialChart_IndicatorMenu_IndicatorsCategoryHeader", "Standalone Indicators"));
    }
    al(a, b) {
        let c = this.ak.al(a);
        return stringIsNullOrEmpty(c) ? b : c;
    }
    am($t, a) {
        this.add(((() => {
            let $ret = new FinancialChartIndicatorMenuItem();
            $ret.d = a;
            $ret.f = a;
            return $ret;
        })()));
        this.an($t);
    }
    an($t) {
        let a = new List$1(Base.$, 0);
        let b = new Dictionary$2(Base.$, String_$type, 0);
        let c = new Dictionary$2(Base.$, Type.$, 0);
        let d = (e) => {
            for (let f = 0; f < e.a; f++) {
                let g = typeGetValue(e.b(f));
                a.add1(g);
                let h = e.c(g);
                b.addItem(g, h);
                c.addItem(g, $t);
            }
        };
        if ($t == FinancialOverlayType_$type) {
            d(this.ah);
        }
        else if ($t == TrendLineType_$type) {
            d(this.ai);
        }
        else if ($t == FinancialIndicatorType_$type) {
            d(this.ag);
        }
        else if ($t == FinancialChartVolumeType_$type) {
            d(this.aj);
        }
        else {
            let e = EnumUtil.getNames($t);
            let f = EnumUtil.getValues($t);
            for (let g = 0; g < f.length; g++) {
                let h;
                let i;
                h = f[g];
                i = e[g];
                i = i.charAt(0).toUpperCase() + i.substr(1);
                if (i == "None") {
                    continue;
                }
                a.add1(h);
                b.addItem(h, i);
                c.addItem(h, $t);
            }
        }
        for (let j of fromEnum(a)) {
            this.add(((() => {
                let $ret = new FinancialChartIndicatorMenuItem();
                $ret.d = j;
                $ret.f = b.containsKey(j) ? b.item(j) : j.toString();
                $ret.c = 1;
                $ret.g = c.containsKey(j) ? c.item(j) : null;
                return $ret;
            })()));
        }
    }
    get ag() {
        if (this.ac == null) {
            this.ao();
        }
        return this.ac;
    }
    ao() {
        this.ac = ((() => {
            let $ret = new OrderedDictionary$2(FinancialIndicatorType_$type, String_$type);
            $ret.addItem(0, this.al("FinancialChart_IndicatorsMenu_Indicator_AbsoluteVolumeOscillator", "Absolute Volume Oscillator"));
            $ret.addItem(1, this.al("FinancialChart_IndicatorsMenu_Indicator_AccumulationDistribution", "Accumulation Distribution"));
            $ret.addItem(2, this.al("FinancialChart_IndicatorsMenu_Indicator_AverageDirectionalIndex", "Average Directional Index"));
            $ret.addItem(3, this.al("FinancialChart_IndicatorsMenu_Indicator_AverageTrueRange", "Average True Range"));
            $ret.addItem(4, this.al("FinancialChart_IndicatorsMenu_Indicator_BollingerBandWidth", "Bollinger Band Width"));
            $ret.addItem(5, this.al("FinancialChart_IndicatorsMenu_Indicator_ChaikinOscillator", "Chaikin Oscillator"));
            $ret.addItem(6, this.al("FinancialChart_IndicatorsMenu_Indicator_ChaikinVolatility", "Chaikin Volatility"));
            $ret.addItem(7, this.al("FinancialChart_IndicatorsMenu_Indicator_CommodityChannelIndex", "Commodity Channel Index"));
            $ret.addItem(8, this.al("FinancialChart_IndicatorsMenu_Indicator_DetrendedPriceOscillator", "Detrended Price Oscillator"));
            $ret.addItem(9, this.al("FinancialChart_IndicatorsMenu_Indicator_EaseOfMovement", "Ease Of Movement"));
            $ret.addItem(10, this.al("FinancialChart_IndicatorsMenu_Indicator_FastStochasticOscillator", "Fast Stochastic Oscillator"));
            $ret.addItem(11, this.al("FinancialChart_IndicatorsMenu_Indicator_ForceIndex", "Force Index"));
            $ret.addItem(12, this.al("FinancialChart_IndicatorsMenu_Indicator_FullStochasticOscillator", "Full Stochastic Oscillator"));
            $ret.addItem(13, this.al("FinancialChart_IndicatorsMenu_Indicator_MarketFacilitationIndex", "Market Facilitation Index"));
            $ret.addItem(14, this.al("FinancialChart_IndicatorsMenu_Indicator_MassIndex", "Mass Index"));
            $ret.addItem(15, this.al("FinancialChart_IndicatorsMenu_Indicator_MedianPrice", "Median Price"));
            $ret.addItem(16, this.al("FinancialChart_IndicatorsMenu_Indicator_MoneyFlowIndex", "Money Flow Index"));
            $ret.addItem(17, this.al("FinancialChart_IndicatorsMenu_Indicator_MovingAverageConvergenceDivergence", "MACD"));
            $ret.addItem(18, this.al("FinancialChart_IndicatorsMenu_Indicator_NegativeVolumeIndex", "Negative Volume Index"));
            $ret.addItem(19, this.al("FinancialChart_IndicatorsMenu_Indicator_OnBalanceVolume", "On Balance Volume"));
            $ret.addItem(20, this.al("FinancialChart_IndicatorsMenu_Indicator_PercentagePriceOscillator", "Percentage Price Oscillator"));
            $ret.addItem(21, this.al("FinancialChart_IndicatorsMenu_Indicator_PercentageVolumeOscillator", "Percentage Volume Oscillator"));
            $ret.addItem(22, this.al("FinancialChart_IndicatorsMenu_Indicator_PositiveVolumeIndex", "Positive Volume Index"));
            $ret.addItem(23, this.al("FinancialChart_IndicatorsMenu_Indicator_PriceVolumeTrend", "Price Volume Trend"));
            $ret.addItem(24, this.al("FinancialChart_IndicatorsMenu_Indicator_RateOfChangeAndMomentum", "ROC"));
            $ret.addItem(25, this.al("FinancialChart_IndicatorsMenu_Indicator_RelativeStrengthIndex", "RSI"));
            $ret.addItem(26, this.al("FinancialChart_IndicatorsMenu_Indicator_SlowStochasticOscillator", "Slow Stochastic Oscillator"));
            $ret.addItem(27, this.al("FinancialChart_IndicatorsMenu_Indicator_StandardDeviation", "Standard Deviation"));
            $ret.addItem(28, this.al("FinancialChart_IndicatorsMenu_Indicator_StochRSI", "Stoch RSI"));
            $ret.addItem(29, this.al("FinancialChart_IndicatorsMenu_Indicator_TRIX", "TRIX"));
            $ret.addItem(30, this.al("FinancialChart_IndicatorsMenu_Indicator_TypicalPrice", "Typical Price"));
            $ret.addItem(31, this.al("FinancialChart_IndicatorsMenu_Indicator_UltimateOscillator", "Ultimate Oscillator"));
            $ret.addItem(32, this.al("FinancialChart_IndicatorsMenu_Indicator_WeightedClose", "Weighted Close"));
            $ret.addItem(33, this.al("FinancialChart_IndicatorsMenu_Indicator_WilliamsPercentR", "Williams %R"));
            return $ret;
        })());
    }
    get ah() {
        if (this.ad == null) {
            this.ap();
        }
        return this.ad;
    }
    ap() {
        this.ad = ((() => {
            let $ret = new OrderedDictionary$2(FinancialOverlayType_$type, String_$type);
            $ret.addItem(0, this.al("FinancialChart_IndicatorsMenu_Overlay_BollingerBands", "Bollinger Bands"));
            $ret.addItem(1, this.al("FinancialChart_IndicatorsMenu_Overlay_PriceChannel", "Price Channel"));
            return $ret;
        })());
    }
    get ai() {
        if (this.ae == null) {
            this.aq();
        }
        return this.ae;
    }
    aq() {
        this.ae = ((() => {
            let $ret = new OrderedDictionary$2(TrendLineType_$type, String_$type);
            $ret.addItem(1, this.al("FinancialChart_IndicatorsMenu_TrendLine_LinearFit", "Linear Fit"));
            $ret.addItem(2, this.al("FinancialChart_IndicatorsMenu_TrendLine_QuadraticFit", "Quadratic Fit"));
            $ret.addItem(3, this.al("FinancialChart_IndicatorsMenu_TrendLine_CubicFit", "Cubic Fit"));
            $ret.addItem(4, this.al("FinancialChart_IndicatorsMenu_TrendLine_QuarticFit", "Quartic Fit"));
            $ret.addItem(5, this.al("FinancialChart_IndicatorsMenu_TrendLine_QuinticFit", "Quintic Fit"));
            $ret.addItem(6, this.al("FinancialChart_IndicatorsMenu_TrendLine_LogarithmicFit", "Logarithmic Fit"));
            $ret.addItem(7, this.al("FinancialChart_IndicatorsMenu_TrendLine_ExponentialFit", "Exponential Fit"));
            $ret.addItem(8, this.al("FinancialChart_IndicatorsMenu_TrendLine_PowerLawFit", "Power LawFit"));
            $ret.addItem(9, this.al("FinancialChart_IndicatorsMenu_TrendLine_SimpleAverage", "Simple Average"));
            $ret.addItem(10, this.al("FinancialChart_IndicatorsMenu_TrendLine_ExponentialAverage", "Exponential Average"));
            $ret.addItem(11, this.al("FinancialChart_IndicatorsMenu_TrendLine_ModifiedAverage", "Modified Average"));
            $ret.addItem(12, this.al("FinancialChart_IndicatorsMenu_TrendLine_CumulativeAverage", "Cumulative Average"));
            $ret.addItem(13, this.al("FinancialChart_IndicatorsMenu_TrendLine_WeightedAverage", "Weighted Average"));
            return $ret;
        })());
    }
    get aj() {
        if (this.af == null) {
            this.ar();
        }
        return this.af;
    }
    ar() {
        this.af = ((() => {
            let $ret = new OrderedDictionary$2(FinancialChartVolumeType_$type, String_$type);
            $ret.addItem(3, this.al("FinancialChart_IndicatorsMenu_Volume_Area", "Area"));
            $ret.addItem(1, this.al("FinancialChart_IndicatorsMenu_Volume_Column", "Column"));
            $ret.addItem(2, this.al("FinancialChart_IndicatorsMenu_Volume_Line", "Line"));
            return $ret;
        })());
    }
}
FinancialChartIndicatorMenuItems.$t = markType(FinancialChartIndicatorMenuItems, 'FinancialChartIndicatorMenuItems', List$1.$.specialize(FinancialChartIndicatorMenuItem.$));
