/// <reference path="Constants.js" />
/// <reference path="../lib/DynamicsPortalToolkit.js" />
/// <reference path="../lib/AvanadeAssetSpinner.js" />

if (typeof (Avanade) == "undefined") { Avanade = { __namespace: true }; }
if (typeof (Avanade.Leonardo) == "undefined") { Avanade.Leonardo = { __namespace: true }; }

Avanade.Leonardo.OpenText = new function () {
    var self = this;

    const constants = Avanade.Leonardo.Constants;
    const url = Avanade.Leonardo.Constants.url;
    const fetchs = Avanade.Leonardo.Constants.fetchUrl;

    self.ShowDocuments = function (table, config, enVarCommon, enVarDivision) {
        var currentEnv = url.includes("ams") ? "qty" : (url.includes("quality") ? "qty": "prod");

        var key = eval("enVarCommon.keys." + (enVarDivision.division).toLowerCase());
        var env = eval("enVarCommon." + currentEnv + ".endpoints");

        var usrLanguage = $('html').attr('data-lang');

        var _enVarCommon = {
            "key": key,
            "endpoints": env
        }

        var param = {
            "lnd_userdomain": config.lnd_userdomain,
            "lnd_userid": config.lnd_userid,
            "lnd_usertype": Avanade.Leonardo.Constants.UserType,
            "lnd_division": config.lnd_division,
            "lnd_language": usrLanguage,
            "lnd_entityname": table.logicalName,
            "lnd_integrationkey": config.lnd_integrationkey,
            "lnd_adx_username": config.lnd_adx_username,
            "lnd_config": {
                "key": _enVarCommon.key,
                "endpoints": _enVarCommon.endpoints
            }

        }

        var paramJson = JSON.stringify(param);
        paramJson = encodeURIComponent(paramJson);
        paramJson = encodeURI(paramJson);

        var oData = "";
        oData = fetchs.OnPremiseActionRequest + "/?action=" + "generateEncodeUrl_v1" + "&input=" + paramJson;

        var urlToRequest = url + "/" + usrLanguage + oData;
        var result = Dynamics.Portal.Fetch.executeWithReturn(urlToRequest, "");

        $('#Showiframe').on('click',
            function () {
                window.open(result.response, "_blank");
            }
        );
    };

    self.ShowDocumentsMultipleFolders = function (table, config, enVarCommon, enVarDivision, folderName, buttonId) {
        var currentEnv = url.includes("dev") ? "dev" : (url.includes("quality") ? "qty" : "prod");

        var key = eval("enVarCommon.keys." + (enVarDivision.division).toLowerCase());
        var env = eval("enVarCommon." + currentEnv + ".endpoints");

        var usrLanguage = $('html').attr('data-lang');

        var _enVarCommon = {
            "key": key,
            "endpoints": env
        }

        var param = {
            "lnd_userdomain": config.lnd_userdomain,
            "lnd_userid": config.lnd_userid,
            "lnd_usertype": Avanade.Leonardo.Constants.UserType,
            "lnd_division": config.lnd_division,
            "lnd_language": usrLanguage,
            "lnd_entityname": table.logicalName,
            "lnd_integrationkey": config.lnd_integrationkey + "-" + folderName,
            "lnd_adx_username": config.lnd_adx_username,
            "lnd_config": {
                "key": _enVarCommon.key,
                "endpoints": _enVarCommon.endpoints
            }

        }

        var paramJson = JSON.stringify(param);
        paramJson = encodeURIComponent(paramJson);
        paramJson = encodeURI(paramJson);

        var oData = "";
        oData = fetchs.OnPremiseActionRequest + "/?action=" + "generateEncodeUrl_v1" + "&input=" + paramJson;

        var urlToRequest = url + "/" + usrLanguage + oData;
        var result = Dynamics.Portal.Fetch.executeWithReturn(urlToRequest, "");

        $('#' + buttonId).on('click',
            function () {
                window.open(result.response, "_blank");
            }
        );
    };

    self.GetDocuments = function (config) {
        var parameters = {
            "entityName": config.lnd_entityname,
            "entityRecordId": config.lnd_entityrecordid,
            "inputParams": {
                "lnd_adx_username": config.lnd_adx_username,
                "lnd_userid": config.lnd_userid,
                "lnd_division": config.lnd_division_label,
                "lnd_filename": config.lnd_filename,
                "lnd_filetype": config.lnd_filetype
            }
        }

        var paramJson = JSON.stringify(parameters);
        paramJson = encodeURIComponent(paramJson);
        paramJson = encodeURI(paramJson);

        var oData = "";
        oData = fetchs.OnPremiseActionRequest + "/?action=" + "GetOpenTextFiles" + "&input=" + paramJson;

        var usrLanguage = $('html').attr('data-lang');
        var urlToRequest = url + "/" + usrLanguage + oData;
        var result = Dynamics.Portal.Fetch.executeWithReturn(urlToRequest, "");

        if (result.code == "500") {
            var response = result.response.replaceAll('doppioapice', '"')
            alert(response);
            return false;
        } else {
            var response = result.response.replaceAll('doppioapice', '"').replaceAll("backslash", '\\');
            var fileObject = JSON.parse(response);
            return fileObject;
        }
    }

    self.UploadDocument = function (config) {
        var parameters = {
            "entityName": config.lnd_entityname,
            "entityRecordId": config.lnd_entityrecordid,
            "inputParams": {
                "lnd_adx_username": config.lnd_adx_username,
                "lnd_userid": config.lnd_userid,
                "lnd_division": config.lnd_division_label,
                "lnd_filename": config.lnd_filename,
                "lnd_filetype": config.lnd_filetype,
                "lnd_filecontent": config.lnd_filecontent
            }
        }

        var paramJson = JSON.stringify(parameters);
        paramJson = encodeURIComponent(paramJson);
        paramJson = encodeURI(paramJson);

        var oData = "";
        oData = fetchs.OnPremiseActionRequest + "/?action=" + "UploadOpenTextFile" + "&input=" + paramJson;

        var usrLanguage = $('html').attr('data-lang');
        var urlToRequest = url + "/" + usrLanguage + oData;
        var result = Dynamics.Portal.Fetch.executeWithReturn(urlToRequest, "");

        if (result.code == "500") {
            var response = result.response.replaceAll('doppioapice', '"')
            alert(response);
            return false;
        } else {
            var response = result.response.replaceAll('doppioapice', '"').replaceAll("backslash", '\\');
            var fileObject = JSON.parse(response);

            console.log("File caricato con successo!");

            return false;
        }
    }

self.DoesFolderContainFilesNoFolder = function (config) {
        var parameters = {
            "entityName": config.lnd_entityname,
            "entityRecordId": config.lnd_integrationkey,
            "inputParams": {
                "lnd_adx_username": config.lnd_adx_username,
                "lnd_userid": config.lnd_userid,
                "lnd_division": config.lnd_division_label,
                "lnd_filetype": config.lnd_filetype
            }
        }
        var paramJson = JSON.stringify(parameters);
        paramJson = encodeURIComponent(paramJson);
        paramJson = encodeURI(paramJson);

        var oData = "";
        oData = fetchs.OnPremiseActionRequest + "/?action=" + "DoesFolderContainFiles" + "&input=" + paramJson;

        var usrLanguage = $('html').attr('data-lang');
        var urlToRequest = url + "/" + usrLanguage + oData;
        var result = Dynamics.Portal.Fetch.executeWithReturn(urlToRequest, "");

        if (result.code == "500") {
            var response = result.response.replaceAll('doppioapice', '"')
            alert(response);
            return false;
        } else {
            return result.response === "true";
        }
    }

    self.DoesFolderContainFiles = function (config, folderName) {
        var parameters = {
            "entityName": config.lnd_entityname,
            "entityRecordId": config.lnd_integrationkey + "-" + folderName,
            "inputParams": {
                "lnd_adx_username": config.lnd_adx_username,
                "lnd_userid": config.lnd_userid,
                "lnd_division": config.lnd_division_label,
                "lnd_filetype": config.lnd_filetype
            }
        } 

        var paramJson = JSON.stringify(parameters);
        paramJson = encodeURIComponent(paramJson);
        paramJson = encodeURI(paramJson);

        var oData = "";
        oData = fetchs.OnPremiseActionRequest + "/?action=" + "DoesFolderContainFiles" + "&input=" + paramJson;

        var usrLanguage = $('html').attr('data-lang');
        var urlToRequest = url + "/" + usrLanguage + oData;
        var result = Dynamics.Portal.Fetch.executeWithReturn(urlToRequest, "");

        if (result.code == "500") {
            var response = result.response.replaceAll('doppioapice', '"')
            alert(response);
            return false;
        } else {
            return result.response === "true";
        }
    }
};