﻿//namespace
if (AXT === undefined) {
    var AXT = {};
}

AXT.suggestEntities = function (fieldName) {
    let baseUrl = Xrm.Page.context.getClientUrl();
    let api = '/api/data/v8.2/EntityDefinitions?$select=LogicalName';
    let url = baseUrl + api;
    let entities = [];
    let request = new XMLHttpRequest();
    request.onreadystatechange = function () {
        if (request.readyState === 4 && request.status === 200) {
            let result = JSON.parse(request.response);
            entities = result.value;
        }
    };
    request.open("GET", url, true);
    request.send(null);

    let keyPressFcn = function (ext) {
        try {
            let userInput = Xrm.Page.getControl(fieldName).getValue();
            let resultSet = {
                results: new Array(),
                commands: {
                    id: "sp_commands",
                    label: "Learn More",
                    action: function () {
                        window.open("http://www.axtension.com/en/products/contentgate");
                    }
                }
            };

            let userInputLowerCase = userInput.toLowerCase();
            for (i = 0; i < entities.length; i++) {
                if (userInputLowerCase === entities[i].LogicalName.substring(0, userInputLowerCase.length).toLowerCase()) {
                    resultSet.results.push({
                        id: i,
                        fields: [entities[i].LogicalName]
                    });
                }
                if (resultSet.results.length >= 10) break;
            }

            if (resultSet.results.length > 0) {
                ext.getEventSource().showAutoComplete(resultSet);
            } else {
                ext.getEventSource().hideAutoComplete();
            }
        } catch (e) {
            console.log(e);
        }
    };

    Xrm.Page.getControl(fieldName).addOnKeyPress(keyPressFcn);
};