var quickFS_INTERFACE = function () {
    var DATA, ACTION, CONVERT, TOKEN;
    var responseData;

    const URL_REST_INTERFACE = "/catalogPortlet.web/rest/private/";
    const URL_QUICK_FS_REST_INTERFACE = URL_REST_INTERFACE + "quickFSRestService/";
    const URL_QUICK_FS_INIT = URL_QUICK_FS_REST_INTERFACE + "init/";
    const URL_QUICK_FS_PAGE = URL_QUICK_FS_REST_INTERFACE + "page/";
    const URL_QUICK_FS_PREVIOUS_YEARS = URL_QUICK_FS_REST_INTERFACE + "previousYears/";
    const URL_QUICK_FS_CHANGE_CONTRACT_STATUS = URL_QUICK_FS_REST_INTERFACE + "changeContractStatus/";

    return {
        "loadDefinition": loadDefinition,
        "loadPage": loadPage,
        "loadPageSubRows": loadPageSubRows,
        "changeContractStatus": changeContractStatus,
        "init": init,
        "clearData": clearData
    };

    function loadDefinition() {
        var jsonRequest = {"token": TOKEN.getToken(), "tenderId": DATA.filter.tenderId};
        var definitionBase = loadJson(URL_QUICK_FS_INIT, jsonRequest);
        if (definitionBase) {
            DATA.definitionBase = {};
            DATA.definitionBase.tenderColumnData = definitionBase.tenderColumnData;
            DATA.definitionBase.tenderMap =
                CONVERT.updateTenderMap(DATA.definitionBase.tenderMap, DATA.filter.tenderId, definitionBase.tenderData);
            DATA.definitionBase.tenderQuestionMap =
                CONVERT.updateTenderQuestionMap(DATA.definitionBase.tenderQuestionMap, DATA.filter.tenderId, definitionBase.tenderQuestionData);
            DATA.definition = CONVERT.getDefinition(definitionBase);
            DATA.userId = definitionBase.userData.userId;
            DATA.userRoleMap = CONVERT.getUserRoleMap(definitionBase.userData);
            if (definitionBase.tenderData.length != 0) {
                DATA.tenderId = DATA.filter.tenderId;
                return true;
            }
            return false;
        }
    }

    function loadPage() {
        DATA.filter.token = TOKEN.getToken();
        var jsonRequest = DATA.filter;
        var pageBase = loadJson(URL_QUICK_FS_PAGE, jsonRequest);
        if (pageBase) {
            DATA.pageBase = {};
            DATA.pageBase.tenderOrganizationMap = CONVERT.getTenderOrganizationMap(pageBase.tenderOrganizationData);
            DATA.pageBase.tenderQuestionAnswerMap =
                CONVERT.updateTenderQuestionAnswerMap(DATA.pageBase.tenderQuestionAnswerMap, DATA.filter.tenderId, pageBase.tenderQuestionAnswers);
            DATA.pageBase.tenderFeatureAnswerMap = CONVERT.getTenderFeatureAnswerMap(pageBase.tenderFeatureAnswers);
            DATA.rowCount = parseInt(pageBase.tenderOrganizationCount[0].contractCount, 10)
            DATA.page = CONVERT.updatePage(DATA.page);
            return true;
        }
    }

    function loadPageSubRows() {
        var jsonRequest = {
            "token": TOKEN.getToken(),
            "organizationId": DATA.organizationId,
            "tenderId": DATA.filter.tenderId
        };
        var subRowsBase = loadJson(URL_QUICK_FS_PREVIOUS_YEARS, jsonRequest);
        DATA.subRowsBase = subRowsBase;
        if (subRowsBase) {
            for (var tenderId in subRowsBase) {
                DATA.definitionBase.tenderMap =
                    CONVERT.updateTenderMap(DATA.definitionBase.tenderMap, tenderId, subRowsBase[tenderId].tenderData);
                DATA.definitionBase.tenderQuestionMap =
                    CONVERT.updateTenderQuestionMap(DATA.definitionBase.tenderQuestionMap, tenderId, subRowsBase[tenderId].tenderQuestionData);
                DATA.pageBase.tenderQuestionAnswerMap =
                    CONVERT.updateTenderQuestionAnswerMap(DATA.pageBase.tenderQuestionAnswerMap, tenderId, subRowsBase[tenderId].tenderQuestionAnswers);
                DATA.page = CONVERT.updatePageRow(DATA.page, tenderId, DATA.organizationId);
            }
            return true;
        }
    }

    function changeContractStatus(tenderId, organizationId, contractStatus) {
        var jsonRequest = {
            "token": TOKEN.getToken(),
            "tenderId": tenderId,
            "organizationId": organizationId,
            "contractStatus": contractStatus
        };
        var result = loadJson(URL_QUICK_FS_CHANGE_CONTRACT_STATUS, jsonRequest);
        return true;
    }

    function loadJson(jsonUrl, jsonRequest) {
        responseData = {};
        DATA.messages = {};

        var success = ajaxPut(jsonUrl, jsonRequest);
        if (success) {
            if (responseData) {
                return responseData;
            } else {
                showMessages();
            }
        }
    }

    function showMessages() {
        var htm = "";
        if (DATA.messages && DATA.messages.length > 0) {
            htm += DATA.messages[0].type + ": " + DATA.messages[0].text;
        }
    }

    function ajaxPut(restURL, requestJson) {
        var isOk = true;
        var ajaxOptions = getAjaxPutOptions(restURL, requestJson);
        var ajaxCall = util.ajax.blocked2(ajaxOptions);
        ajaxCall.done(function (responseJson) {
            try {
                if (responseJson) {
                    TOKEN.setToken(responseJson.token);
                    DATA.messages = responseJson.messages;
                    responseData = responseJson.responseData;
                }
            } catch (e) {
                util.log.error("Putting HTTP request failed: " + e);
                isOk = false;
            }
        });
        return isOk;
    }

    function getAjaxPutOptions(restURL, requestJson) {
        var ajaxOptions = {
            data: JSON.stringify(requestJson),
            url: restURL
        };
        return ajaxOptions;
    }

    function init(quickFS) {
        ACTION = quickFS.ACTION;
        DATA = quickFS.DATA;
        CONVERT = quickFS.INTERFACE_CONVERT;
        TOKEN = quickFS.INTERFACE_TOKEN;
    }

    function clearData() {
        for (var elem in DATA) {
            if (elem !== "guiParentSelector") {
                delete DATA[elem];
            }
        }
    }

}
