/*
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 { __extends, __values } from "tslib";
import { AnnotationLayer } from "./AnnotationLayer";
import { DependencyProperty } from "igniteui-angular-core";
import { Series } from "./Series";
import { Brush } from "igniteui-angular-core";
import { ItemTooltipLayerFrame } from "./ItemTooltipLayerFrame";
import { Base, String_$type, fromEnum, Point_$type, markType, markDep, runOn } from "igniteui-angular-core";
import { Pool$1 } from "igniteui-angular-core";
import { List$1 } from "igniteui-angular-core";
import { ItemTooltipCollisionInfo } from "./ItemTooltipCollisionInfo";
import { Rect } from "igniteui-angular-core";
import { DataContext } from "igniteui-angular-core";
import { Size } from "igniteui-angular-core";
import { DeviceUtils } from "igniteui-angular-core";
import { PropertyMetadata } from "igniteui-angular-core";
import { isNaN_ } from "igniteui-angular-core";
import { AnnotationLayerView } from "./AnnotationLayerView";
import { PointerTooltip } from "./PointerTooltip";
import { PointerTooltipStyle } from "./PointerTooltipStyle";
import { PointerTooltipUtils } from "./PointerTooltipUtils";
/**
 * @hidden
 */
var ItemToolTipLayer = /** @class */ /*@__PURE__*/ (function (_super) {
    __extends(ItemToolTipLayer, _super);
    function ItemToolTipLayer() {
        var _this = _super.call(this) || this;
        var a = new ItemTooltipLayerFrame();
        var b = new ItemTooltipLayerFrame();
        var c = new ItemTooltipLayerFrame();
        var d = _this.kh / 1000;
        _this.xm = a;
        _this.xl = b;
        _this.xn = c;
        _this.ab = ItemToolTipLayer.$;
        return _this;
    }
    ItemToolTipLayer.prototype.bk = function () {
        return new ItemToolTipLayer();
    };
    ItemToolTipLayer.prototype.get_et = function () {
        return true;
    };
    ItemToolTipLayer.prototype.ct = function () {
        return new ItemToolTipLayerView(this);
    };
    ItemToolTipLayer.prototype.q7 = function (a) {
        _super.prototype.q7.call(this, a);
        this.aaf = a;
    };
    ItemToolTipLayer.prototype.get_e4 = function () {
        return true;
    };
    ItemToolTipLayer.prototype.gv = function (a) {
        if (this.aag == null) {
            return true;
        }
        if (this.aag == a) {
            return true;
        }
        return false;
    };
    ItemToolTipLayer.prototype.rg = function (a, b, c, d) {
        _super.prototype.rg.call(this, a, b, c, d);
        switch (b) {
            case ItemToolTipLayer.$$p[1]:
            case ItemToolTipLayer.$$p[2]:
                this.ry(true);
                break;
            case ItemToolTipLayer.$$p[6]:
                this.ry(true);
                break;
            case ItemToolTipLayer.$$p[0]:
                this.ry(true);
                break;
            case "SeriesViewer":
                this.aaf.cz();
                break;
            case ItemToolTipLayer.$$p[3]:
            case ItemToolTipLayer.$$p[4]:
            case ItemToolTipLayer.$$p[5]:
                this.ry(true);
                break;
        }
    };
    ItemToolTipLayer.prototype.y1 = function (a, b) {
        if (this.aag == null || this.aag == a) {
            if (!this.a1.c) {
                this.ry(b);
            }
        }
    };
    ItemToolTipLayer.prototype.xs = function (a) {
        if (!_super.prototype.xs.call(this, a)) {
            return false;
        }
        if (this.aan != null) {
            if (a.isFragment) {
                var b = a.nh();
                if (!Base.equalsStatic(this.aan, b)) {
                    return false;
                }
            }
            else {
                if (!Base.equalsStatic(this.aan, a.name)) {
                    return false;
                }
            }
        }
        var c = this.yw(a);
        if (!c.c) {
            return false;
        }
        return true;
    };
    ItemToolTipLayer.prototype.y3 = function (a, b) {
        var e_1, _a;
        var _this = this;
        _super.prototype.y3.call(this, a, b);
        var c = a;
        var d = this.aaf.co;
        var e = this.aaj;
        var f = this.aai;
        c.o.clear();
        c.i.clear();
        c.n.clear();
        c.g.clear();
        c.f.clear();
        c.l.clear();
        c.j.clear();
        c.m.clear();
        c.k.clear();
        c.h.clear();
        if (isNaN_(this.aac.x) && isNaN_(this.aac.y)) {
            d.count = 0;
            return;
        }
        var g = 0;
        if (this.xs(this.aag)) {
            this.aav(this.aag, c, e, f, 0);
            g++;
        }
        else {
            try {
                for (var _b = __values(fromEnum(this.dc.series)), _c = _b.next(); !_c.done; _c = _b.next()) {
                    var h = _c.value;
                    if (this.xs(h)) {
                        this.aav(h, c, e, f, g);
                        g++;
                    }
                    if (h.isStacked) {
                        h.p9(function (i) {
                            if (_this.xs(i)) {
                                _this.aav(i, c, e, f, g);
                                g++;
                            }
                            if (i.ei) {
                                i.p7(function (j) {
                                    if (_this.xs(j)) {
                                        _this.aav(j, c, e, f, g);
                                        g++;
                                    }
                                    return true;
                                });
                            }
                            return true;
                        });
                    }
                    if (h.ei) {
                        h.p7(function (i) {
                            if (_this.xs(i)) {
                                _this.aav(i, c, e, f, g);
                                g++;
                            }
                            return true;
                        });
                    }
                }
            }
            catch (e_1_1) {
                e_1 = { error: e_1_1 };
            }
            finally {
                try {
                    if (_c && !_c.done && (_a = _b.return))
                        _a.call(_b);
                }
                finally {
                    if (e_1)
                        throw e_1.error;
                }
            }
            this.aau(c);
        }
        d.count = g;
    };
    ItemToolTipLayer.prototype.aau = function (a) {
        var b = new List$1(ItemTooltipCollisionInfo.$, 0);
        for (var c = 0; c < a.f.count; c++) {
            var d = new ItemTooltipCollisionInfo();
            d.d = c;
            d.e = { $type: Point_$type, x: a.f._inner[c], y: a.g._inner[c] };
            d.c = a.m._inner[c];
            d.a = a.k._inner[c];
            d.b = a.o._inner[c];
            if (isNaN_(d.e.x) || isNaN_(d.e.y)) {
                continue;
            }
            b.add(d);
        }
        b.aa(function (e, f) {
            if (e.e.y < f.e.y) {
                return -1;
            }
            if (e.e.y > f.e.y) {
                return 1;
            }
            if (e.b < f.b) {
                return -1;
            }
            if (e.b > f.b) {
                return 1;
            }
            return 0;
        });
        var e = this.aah(b);
        if (!e) {
            return;
        }
        for (var f = 0; f < b.count - 1; f++) {
            var g = b._inner[f];
            var h = b._inner[f + 1];
            var i = new Rect(0, g.e.x, g.e.y, g.c, g.a);
            var j = new Rect(0, h.e.x, h.e.y, h.c, h.a);
            if (i.intersectsWith(j) || i.top > j.bottom) {
                h.e = { $type: Point_$type, x: h.e.x, y: i.bottom + 1 };
            }
        }
        if (b._inner[b.count - 1].e.y + b._inner[b.count - 1].a > this.cw.b9.height) {
            b._inner[b.count - 1].e = { $type: Point_$type, x: b._inner[b.count - 1].e.x, y: b._inner[b.count - 1].e.y - ((b._inner[b.count - 1].e.y + b._inner[b.count - 1].a) - this.cw.b9.height) };
        }
        for (var k = b.count - 1; k >= 1; k--) {
            var l = b._inner[k];
            var m = b._inner[k - 1];
            var n = new Rect(0, l.e.x, l.e.y, l.c, l.a);
            var o = new Rect(0, m.e.x, m.e.y, m.c, m.a);
            if (n.intersectsWith(o) || n.top < o.bottom) {
                m.e = { $type: Point_$type, x: m.e.x, y: n.top - (o.height + 1) };
            }
        }
        for (var p = 0; p < b.count; p++) {
            var q = b._inner[p].d;
            var r = b._inner[p];
            a.f._inner[q] = r.e.x;
            a.g._inner[q] = r.e.y;
        }
    };
    ItemToolTipLayer.prototype.aah = function (a) {
        if (a.count <= 1) {
            return false;
        }
        var b = this.cw.b9;
        for (var c = 0; c < a.count - 1; c++) {
            var d = a._inner[c];
            var e = a._inner[c + 1];
            var f = new Rect(0, d.e.x, d.e.y, d.c, d.a);
            var g = new Rect(0, e.e.x, e.e.y, e.c, e.a);
            if (f.intersectsWith(g)) {
                return true;
            }
        }
        return false;
    };
    ItemToolTipLayer.prototype.aav = function (a, b, c, d, e) {
        var f = this.yw(a);
        if (!f.c) {
            return;
        }
        var g = a.wm(f.d, c, d);
        var h = this.aaf.co;
        var i = this.aal(a);
        var j = this.aac;
        if (!c) {
            j = this.wr(g);
        }
        var k = a.kr(j);
        var l = h.item(e);
        var m = this.cw.b9;
        var n = null;
        if (a.e5 && k != null) {
            n = a.a3(k);
        }
        else {
            n = new DataContext();
            n.item = k;
            n.series = a;
        }
        if (!this.aaf.cp(a, l, i, n)) {
            return;
        }
        var o = this.aaf.c0(l, i, n);
        b.i.add1(l);
        b.j.add1(n);
        b.l.add1(i);
        var p = g.x;
        var q = g.x;
        q = Math.max(q, m.left);
        q = Math.min(q, m.right);
        b.n.add(q);
        var r = g.y;
        r = Math.max(r, m.top);
        r = Math.min(r, m.bottom);
        b.o.add(r);
        var s = DeviceUtils.g(10);
        var t = g.x + s;
        if (t + o.width > m.right) {
            t = (p - o.width) - s;
        }
        if (t < m.left) {
            t = m.left;
        }
        b.f.add(t);
        var u = (g.y - o.height) - s;
        if (u + o.height > m.bottom) {
            u = (m.bottom - o.height) - s;
        }
        if (u < m.top) {
            u = m.top;
        }
        b.g.add(u);
        b.m.add(o.width);
        b.k.add(o.height);
        var v = this.vj;
        if (v == null) {
            v = this.vp;
        }
        if (v == null) {
            v = a.vj;
        }
        b.h.add(v);
    };
    ItemToolTipLayer.prototype.aal = function (a) {
        return a.toolTip;
    };
    ItemToolTipLayer.prototype.qd = function () {
        this.aac = { $type: Point_$type, x: NaN, y: NaN };
        this.ry(false);
        this.aaf.cx(false);
    };
    ItemToolTipLayer.prototype.qe = function () {
        this.aac = { $type: Point_$type, x: NaN, y: NaN };
        this.ry(false);
        this.aaf.cx(true);
    };
    ItemToolTipLayer.prototype.y6 = function (a, b) {
        _super.prototype.y6.call(this, a, b);
        var c = a;
        var d = c.o.count;
        var e = b.b9.left;
        var f = b.b9.right;
        var g = b.b9.top;
        var h = b.b9.bottom;
        for (var i = 0; i < d; i++) {
            if (isNaN_(c.n._inner[i]) || isNaN_(c.o._inner[i]) || isNaN_(c.f._inner[i]) || isNaN_(c.g._inner[i]) || c.l._inner[i] == null || c.j._inner[i] == null) {
                this.aaf.cw(c.i._inner[i]);
                continue;
            }
            var j = c.f._inner[i];
            var k = c.g._inner[i];
            var l = c.m._inner[i];
            var m = c.k._inner[i];
            var n = false;
            if (j < e && Math.abs(j - e) > 1) {
                n = true;
            }
            if (k < g && Math.abs(k - g) > 1) {
                n = true;
            }
            if ((j + l) > f && Math.abs((j + l) - f) > 1) {
                n = true;
            }
            if ((k + m) > h && Math.abs((k + m) - h) > 1) {
                n = true;
            }
            if (n) {
                this.aaf.cw(c.i._inner[i]);
                continue;
            }
            var o = c.i._inner[i];
            var p = Math.min(c.f._inner[i], c.n._inner[i]);
            var q = Math.min(c.g._inner[i], c.o._inner[i]);
            var r = c.n._inner[i] - c.f._inner[i];
            var s = c.o._inner[i] - c.g._inner[i];
            if (o != null) {
                this.aaf.cy(o, p, q, r, s);
            }
        }
    };
    ItemToolTipLayer.prototype.gb = function () {
        return true;
    };
    ItemToolTipLayer.$t = markType(ItemToolTipLayer, 'ItemToolTipLayer', AnnotationLayer.$);
    ItemToolTipLayer.$$p = markDep(DependencyProperty, PropertyMetadata, ItemToolTipLayer, 'raisePropertyChanged', ['SkipUnknownValues:aai:aaw', [0, true], 'TargetSeriesName:aan:aax', [2, null], 'TargetSeries:aag:aay', [Series.$, null], 'ToolTipBackground:aa3:aaz', [Brush.$, null], 'ToolTipBorderBrush:aa4:aa0', [Brush.$, null], 'ToolTipBorderThickness:aak:aa1', [1, NaN], 'UseInterpolation:aaj:aa2', [0, false]]);
    return ItemToolTipLayer;
}(AnnotationLayer));
export { ItemToolTipLayer };
/**
 * @hidden
 */
var ItemToolTipLayerView = /** @class */ /*@__PURE__*/ (function (_super) {
    __extends(ItemToolTipLayerView, _super);
    function ItemToolTipLayerView(a) {
        var _this = _super.call(this, a) || this;
        _this.cn = null;
        _this.co = null;
        _this.cq = null;
        _this._htmlTest = null;
        _this.cn = a;
        _this.cq = new List$1(PointerTooltip.$, 0);
        return _this;
    }
    ItemToolTipLayerView.prototype.a4 = function () {
        var _this = this;
        _super.prototype.a4.call(this);
        this.co = ((function () {
            var $ret = new Pool$1(Base.$);
            $ret.create = runOn(_this, _this.cr);
            $ret.activate = runOn(_this, _this.ct);
            $ret.disactivate = runOn(_this, _this.cv);
            $ret.destroy = runOn(_this, _this.cu);
            return $ret;
        })());
        this.htmlTest = /^[^<]*(<[\w\W]+>)[^>]*$/;
    };
    ItemToolTipLayerView.prototype.as = function () {
        _super.prototype.as.call(this);
        for (var a = 0; a < this.co.a.count; a++) {
            this.co.a._inner[a].br();
        }
        for (var b = 0; b < this.co.b.count; b++) {
            this.co.b._inner[b].br();
        }
        this.co.clear();
    };
    ItemToolTipLayerView.prototype.cr = function () {
        var a = new PointerTooltip();
        a.bw(this.f.j3);
        a._visibility = 1;
        a.ap = this.f.dc.dp.k;
        this.cq.add(a);
        return a;
    };
    ItemToolTipLayerView.prototype.ct = function (a) {
        var b = a;
    };
    ItemToolTipLayerView.prototype.cv = function (a) {
        var b = a;
        b._visibility = 1;
    };
    ItemToolTipLayerView.prototype.cu = function (a) {
        var b = a;
        b.bz();
        b.content = null;
        this.cq.remove1(a);
    };
    Object.defineProperty(ItemToolTipLayerView.prototype, "htmlTest", {
        get: function () {
            return this._htmlTest;
        },
        set: function (a) {
            this._htmlTest = a;
        },
        enumerable: false,
        configurable: true
    });
    ItemToolTipLayerView.prototype.cp = function (a, b, c, d) {
        var e = b;
        if (a.k6 == "default") {
            a.k6 = a.cw.getDefaultTooltipTemplate();
        }
        var template_ = a.k6;
        var context_ = d;
        if (a.toolTip == null) {
            return false;
        }
        var tooltip_ = a.toolTip;
        if ((tooltip_.updateToolTip)) {
            tooltip_._inPointer = true;
            tooltip_.updateToolTip(context_, true);
            tooltip_.setStyleProperty('position', 'relative');
            tooltip_.setStyleProperty('left', '');
            tooltip_.setStyleProperty('top', '');
        }
        e.content = a.toolTip;
        return true;
    };
    ItemToolTipLayerView.prototype.c0 = function (a, b, c) {
        var d = a;
        var e = d.content;
        var f = new Size(1, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY);
        d.cy = 1;
        var g = d.cx(new Size(1, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY));
        d.cy = 0;
        return g;
    };
    ItemToolTipLayerView.prototype.cy = function (a, b, c, d, e) {
        var f = new PointerTooltipStyle();
        if (this.f.dc != null) {
            var g = this.f.dc.dp.j.i();
            PointerTooltipUtils.a(g, f, this.cn.aa3, this.cn.aa4, this.cn.aak);
        }
        var h = a;
        h.aq = f;
        var i = h.content;
        h.cs = { $type: Point_$type, x: d, y: e };
        h._visibility = 0;
        h.n = b;
        h.o = c;
    };
    ItemToolTipLayerView.prototype.cw = function (a) {
        if (a != null) {
            var b = a;
            b._visibility = 1;
        }
    };
    ItemToolTipLayerView.prototype.bj = function (a, b) {
        _super.prototype.bj.call(this, a, b);
        if (b) {
            return;
        }
        var c = 0;
        var d = 0;
        var e = this.f.dc;
        if (e != null) {
            var f = e.dp.j.b8();
            c += f.x;
            d += f.y;
        }
        for (var g = 0; g < this.cq.count; g++) {
            this.cq._inner[g].by(this.cq._inner[g].n + c, this.cq._inner[g].o + d);
        }
    };
    ItemToolTipLayerView.prototype.ax = function (a) {
        var e_2, _a;
        _super.prototype.ax.call(this, a);
        try {
            for (var _b = __values(fromEnum(this.co.a)), _c = _b.next(); !_c.done; _c = _b.next()) {
                var tooltip_ = _c.value;
                if (tooltip_._visibility != 0) {
                    continue;
                }
                var b = tooltip_;
                var c = b.a5();
                var d = b.n;
                var e = b.o;
                var f = new List$1(String_$type, 0);
                var g = b.content;
                if (g != null) {
                    var h = g.findByClass("ui-chart-default-tooltip-content");
                    if (h != null && h.length > 0 && h[0] != null && h[0].getChildCount() > 0) {
                        var i = h[0];
                        var j = i.getChildAt(0);
                        var k = j.getText();
                        f.add(k);
                    }
                    else {
                        var l = g.getText();
                        f.add(l);
                    }
                }
                this.f.bc.addPointerTooltipData(a, c, d, e, f);
            }
        }
        catch (e_2_1) {
            e_2 = { error: e_2_1 };
        }
        finally {
            try {
                if (_c && !_c.done && (_a = _b.return))
                    _a.call(_b);
            }
            finally {
                if (e_2)
                    throw e_2.error;
            }
        }
    };
    ItemToolTipLayerView.prototype.cx = function (a) {
        this.a2();
        for (var b = 0; b < this.cq.count; b++) {
            this.cw(this.cq._inner[b]);
            if (a) {
                this.cq._inner[b].bs();
            }
        }
    };
    ItemToolTipLayerView.prototype.cz = function () {
        if (this.f.dc == null) {
            this.cx(true);
        }
    };
    ItemToolTipLayerView.$t = markType(ItemToolTipLayerView, 'ItemToolTipLayerView', AnnotationLayerView.$);
    return ItemToolTipLayerView;
}(AnnotationLayerView));
export { ItemToolTipLayerView };
