import { __assign, __awaiter, __generator, __spreadArray } from "tslib";
import { Component, triggerEvent, triggerEventOnly } from '../_util/simply';
import { PINYIN_MAP } from './constants';
import { RareWordsKeyboardProps } from './props';
import { formatZDatas, loadFontFace, matchWordsRecommend } from './utils';
import { ZDATAS } from './zdatas';
import { getInstanceBoundingClientRect } from '../_util/jsapi/get-instance-bounding-client-rect';
var wordsData = formatZDatas(ZDATAS.datas);
Component(RareWordsKeyboardProps, {
    getInstance: function () {
        if (this.$id) {
            return my;
        }
        return this;
    },
    getBoundingClientRect: function (query) {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, getInstanceBoundingClientRect(this.getInstance(), query)];
                    case 1: return [2 /*return*/, _a.sent()];
                }
            });
        });
    },
    // 隐藏键盘，失去焦点
    handleHide: function () {
        this.setData({
            inputValue: [],
            matchWordsList: [],
            displayStr: '',
            showMoreWords: false,
        });
        triggerEventOnly(this, 'close');
    },
    // 点击键盘key值
    handleKeyClick: function (e) {
        if (this.data.loading)
            return;
        var _a = e.currentTarget.dataset.value, value = _a === void 0 ? '' : _a;
        if (!value)
            return;
        var inputValue = __spreadArray(__spreadArray([], this.data.inputValue, true), [value], false);
        this.setData(__assign({ inputValue: __spreadArray([], inputValue, true) }, this.computeMatchWords(inputValue)));
    },
    // 点击删除
    handleDelete: function () {
        var inputValue = __spreadArray([], this.data.inputValue, true);
        if (this.data.inputValue.length === 0)
            return;
        inputValue.pop();
        this.setData(__assign({ inputValue: __spreadArray([], inputValue, true) }, this.computeMatchWords(inputValue)));
    },
    // 计算展示值和候选字列表
    computeMatchWords: function (inputValue) {
        var displayStr = Array.isArray(inputValue)
            ? inputValue.join('')
            : inputValue;
        var curMatchWords = matchWordsRecommend(wordsData, displayStr);
        return {
            displayStr: displayStr,
            matchWordsList: curMatchWords,
        };
    },
    // 点击查看更多
    hanleLookMore: function () {
        if (this.data.matchWordsList.length <= this.data.maxDisplayNum) {
            this.handleHide();
            return;
        }
        this.setData({
            showMoreWords: !this.data.showMoreWords,
        });
    },
    // 计算每行可以展示的最大字数
    computeMaxDisplayNum: function () {
        return __awaiter(this, void 0, void 0, function () {
            var _a, singleWords, wordsWrap, maxDisplayNumInOneLine;
            return __generator(this, function (_b) {
                switch (_b.label) {
                    case 0: return [4 /*yield*/, Promise.all([
                            this.getBoundingClientRect('.ant-rare-words-keyboard-match_words_hidden'),
                            this.getBoundingClientRect('.ant-rare-words-keyboard-match_words_inner'),
                        ])];
                    case 1:
                        _a = _b.sent(), singleWords = _a[0], wordsWrap = _a[1];
                        if (!(wordsWrap === null || wordsWrap === void 0 ? void 0 : wordsWrap.width) || !(singleWords === null || singleWords === void 0 ? void 0 : singleWords.width))
                            return [2 /*return*/];
                        maxDisplayNumInOneLine = parseInt(((wordsWrap === null || wordsWrap === void 0 ? void 0 : wordsWrap.width) / (singleWords === null || singleWords === void 0 ? void 0 : singleWords.width)).toString(), 10);
                        this.setData({ maxDisplayNum: maxDisplayNumInOneLine });
                        return [2 /*return*/];
                }
            });
        });
    },
    // 加载字体
    loadFont: function () {
        var _this = this;
        this.setData({
            loading: true,
        });
        loadFontFace()
            .then(function () {
            _this.setData({ showErrorPage: false, loading: false });
        })
            .catch(function (err) {
            _this.setData({ showErrorPage: true, loading: false });
            triggerEvent(_this, 'error', err);
        });
    },
    // 点击重试
    handleRetry: function () {
        this.loadFont();
    },
    handleWordClick: function (e) {
        var _a = e.currentTarget.dataset.value, value = _a === void 0 ? '' : _a;
        if (!value)
            return;
        triggerEvent(this, 'change', value);
        this.handleHide();
    },
}, {
    loading: false,
    inputValue: [],
    displayStr: '',
    matchWordsList: [],
    showMoreWords: false,
    pinyinMaps: PINYIN_MAP,
    maxDisplayNum: 0,
    showErrorPage: false, // 是否展示错误页
}, null, {
    didMount: function () {
        this.loadFont();
        this.computeMaxDisplayNum();
    },
});
