"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Modal_1 = __importStar(require("../../Modal"));
const jquery_1 = __importDefault(require("jquery"));
const errorText = 'Помилка на сайті';
const title = 'Дані з реєстру Інтелектуальної власності "Єдине вікно для міжнародної торгівлі"';
class INTPinfo {
    static setCode(code) {
        this.code = code;
    }
    static setData(data) {
        this.data = data;
    }
    static handleRequest() {
        return new Promise((resolve, reject) => {
            if (this.code !== undefined) {
                jquery_1.default.get(`admin.SWIProperty.data?p_code=${this.code}`).done((response) => {
                    resolve(response);
                }).catch((error) => {
                    reject(error);
                });
            }
            else {
                reject('Помилка відправки запиту');
            }
        });
    }
    static makeDocName(item) {
        let docName = item.sec_doc_name;
        if (item.sec_doc_date) {
            docName += ` від ${item.sec_doc_date}`;
        }
        if (item.sec_doc_num) {
            docName += ` №${item.sec_doc_num}`;
        }
        if (item.sec_doc_expir) {
            docName += ` (чинний до ${item.sec_doc_expir})`;
        }
        return docName;
    }
    static highlightText(text, query) {
        if (query) {
            const regex = new RegExp(query, 'gi');
            return text.replace(regex, (match) => `<span class=&quot;text-uppercase bg-primary-300&quot;>${match}</span>`);
        }
        else {
            return text;
        }
    }
    static makeTableContent(data, query) {
        const filteredData = data || this.data;
        return filteredData.map((item, index) => {
            let result = '';
            result += '<tr>';
            result += `<td class="align-top py-2">${index + 1}</td>`;
            result += `<td class="align-top py-2">${item.obj_num}</td>`;
            result += `<td class="align-top py-2"><span class="text-success">${item.created}</span></td>`;
            result += `<td class="align-top py-2">${item.obj_type_name}</td>`;
            result += `<td class="align-top py-2"><span class="text-danger">${item.obj_expirated}</span></td>`;
            result += `<td class="align-top py-2">${item.cli_name} </td>`;
            result += `<td class="align-top py-2">${this.emphasizeTextInQuotes(this.highlightText(this.makeDocName(item), query)).replace(/&quot;/ig, '"')}</td>`;
            result += `<td class="align-top py-2">${this.highlightText(item.goods_names.replace(/;/ig, ';<br>'), query)}</td>`;
            result += `<td class="align-top py-2">${item.assist_cli.replace(/;/ig, ';<br>')}</td>`;
            result += '</tr>';
            return result;
        })
            .join('');
    }
    static makeHtml(filteredData) {
        const data = filteredData || this.data;
        let content = '';
        content += '<div class="col-4"><input type="text" id="intpSearch" class="form-control" placeholder="Пошук по товарам або документу.."/></div>';
        content += '<table class="table">';
        content += '<thead>';
        content += '<tr>';
        content += '<th></th>';
        content += '<th>№</th>';
        content += '<th>Від</th>';
        content += '<th>Тип ОПІВ</th>';
        content += '<th>Термін реєстрації</th>';
        content += '<th>Правовласник</th>';
        content += '<th>Охоронний документ</th>';
        content += '<th>Товари</th>';
        content += '<th>Уповноважена особа</th>';
        content += '</tr>';
        content += '</thead>';
        content += '<tbody id="intpBody">';
        content += this.makeTableContent(data);
        content += '</tbody>';
        content += '</table>';
        return content;
    }
    static emphasizeTextInQuotes(text) {
        // Use regular expression to find all text in between double quotes
        const regex = /".*"/g;
        const matches = text.match(regex);
        // Loop through each match and surround with <span class="font-weight-semibold"> tags
        matches === null || matches === void 0 ? void 0 : matches.forEach(match => {
            const emphasized = `<span class="font-weight-bold">"${match.substring(1, match.length - 1)}"</span>`;
            text = text.replace(match, emphasized);
        });
        return text;
    }
    static buttonHtml(code) {
        return `<span data-code="${code}" title="Шукати записи в реєстрі Інтелектуальної власності Єдиного вікна по коду ${code}" class="cursor-pointer ml-1 text-muted intpBtn"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-badge-tm" viewBox="0 0 16 16">
        <path d="M5.295 11V5.995H7V5H2.403v.994h1.701V11h1.19zm3.397 0V7.01h.058l1.428 3.239h.773l1.42-3.24h.057V11H13.5V5.001h-1.2l-1.71 3.894h-.039l-1.71-3.894H7.634V11h1.06z"></path>
        <path d="M14 3a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h12zM2 2a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H2z"></path>
        </svg></span>`;
    }
    static htmlWrap(code, content) {
        let html = '';
        html += '<div class="row">';
        if (typeof content === 'string') {
            html += content;
        }
        else {
            html += content();
        }
        html += this.buttonHtml(code);
        html += '</div>';
        return html;
    }
    static onClick(e) {
        const code = (0, jquery_1.default)(e.currentTarget)
            .attr('data-code');
        if (code) {
            // @ts-ignore
            this.setCode(code);
            this.init();
        }
    }
    static onMouseEnter() {
        (0, jquery_1.default)(this)
            .removeClass('text-muted')
            .addClass('text-primary');
    }
    static onMouseLeave() {
        (0, jquery_1.default)(this)
            .removeClass('text-primary')
            .addClass('text-muted');
    }
    static makeTitle() {
        return `${title} - ${this.code}<a href="https://cabinet.customs.gov.ua/ipr/reg/overview" class="ml-1" title="Дивитися в Єдиному вікні"><i class="icon-square-up-right"/></a>`;
    }
    static onSearch(t, event) {
        const filteredData = t.data.filter((item) => {
            const r = new RegExp(event.target.value, 'ig');
            return r.test(item.goods_names) || r.test(t.makeDocName(item));
        });
        //@ts-ignore
        document.getElementById('intpBody').innerHTML = this.makeTableContent(filteredData, event.target.value);
    }
    static init() {
        Modal_1.default.open(this.makeTitle(), Modal_1.ModalSize.full);
        this.handleRequest().then((response) => {
            const { ok, data, error, msg } = response;
            if (ok && data) {
                if (data.length > 0) {
                    this.setData(data);
                    Modal_1.default.setBody(this.makeHtml());
                }
                else {
                    Modal_1.default.setBody(this.makeEmptyMsg('Дані відсутні'));
                }
            }
            else if (msg) {
                Modal_1.default.setBody(this.makeWarning(msg));
            }
            else {
                Modal_1.default.setBody(this.makeError(error ? error : errorText));
            }
        }).then(() => {
            var _a;
            (_a = document.getElementById('intpSearch')) === null || _a === void 0 ? void 0 : _a.addEventListener('input', ((event) => {
                this.onSearch(this, event);
            }).bind(this));
        }).catch((error) => {
            Modal_1.default.setBody(this.makeError('Помилка зв\'язку з сервером'));
            console.error(error);
        });
        Modal_1.default.onClose(() => {
            this.code = undefined;
        });
    }
    static open(code) {
        this.setCode(code);
        this.code && this.init();
    }
    static makeError(error) {
        return `<div class=\'alert alert-danger\'>${error}</div>`;
    }
    static makeEmptyMsg(msg) {
        return `<div class=\'alert alert-info\'>${msg}</div>`;
    }
    static makeWarning(warning) {
        return `<div class=\'alert alert-warning\'>${warning}</div>`;
    }
}
exports.default = INTPinfo;
