var quickFS_ACTION = function() {
    var DATA, GUI, INTERFACE, CONTRACT_STRUCTURE;

    return {
        "pageToRow":pageToRow,
        "init":init
    };

    function pageToRow(page, pageSize) {
        DATA.filter.offset = (page - 1) * pageSize + 1;
        DATA.filter.next = pageSize;
        INTERFACE.loadPage();
        GUI.viewPage();
    }

    function initEvents() {
        var $parent = $(DATA.guiParentSelector).first();
        addOrderEvent($parent);
        addOrderDescEvent($parent);
        addShowSubRowsEvent($parent);
        addShowContractEvent($parent);
        addHideSubRowsEvent($parent);
        addChangeContractStatusEvent($parent);
        addPopupEvent($parent);
        addActionBooleanEvent($parent);
        addGlobalActionEvent($parent);
        addTextChangeEvent($parent);
        addBooleanClickEvent($parent);
        addRadioChangeEvent($parent);
        addSingleSelectionClickEvent($parent);
        addCloseAnswersHistoryEvent($parent);
        addShowAnswersHistoryEvent($parent);
        addSearchEvent($parent);
    }

    function addSearchEvent($events) {
        $events.off("click", ".search");
        $events.on("click", ".search", function() {
            search();
        });
    }

    function search() {
        INTERFACE.clearData();
        GUI.clearResultStatus();
        GUI.clearResult();
        GUI.setWaitStatus();

        DATA.filter = GUI.getFilter();
        if (INTERFACE.loadDefinition()) {
            if (INTERFACE.loadPage()) {
                GUI.viewPage();
                GUI.setResultStatus();
                return;
            }
        }

        GUI.clearWaitStatus();
    }

    function addGlobalActionEvent($events) {
        $events.off("click", ".action.acceptRows");
        $events.on("click", ".action.acceptRows", function() {
            var selectedRows = GUI.getSelectedRows();
            if (selectedRows == "") {
                alert("please select row(s) before");
            } else {
                alert("accept:" + selectedRows);
            }
        });
    }

    function addTextChangeEvent($events) {
        $events.off("change", ".data-type-Text textarea");
        $events.on("change", ".data-type-Text textarea", function() {
            var $td = $(this).parent();
            GUI.setValue($td, $(this).val());
            var success = storeValue($td);
            if (success) {
                $(this).addClass("quickFsValueSaved");
            }
        });
    }

    function addBooleanClickEvent($events) {
        $events.off("click", ".data-type-Boolean > div");
        $events.on("click", ".data-type-Boolean > div", function() {
            var $td = $(this).parent();
            var value = GUI.getValue($td);
            if (value === "true") {
                GUI.setValue($td, "false");
            } else {
                GUI.setValue($td, "true");
            }
            var success = storeValue($td);
            if (success) {
                $(this).addClass("quickFsValueSaved");
            }
        });
    }

    function addRadioChangeEvent($events) {
        $events.off("change", ".data-type-Radio input[type='radio']");
        $events.on("change", ".data-type-Radio input[type='radio']", function() {
            var $input = $(this);
            var $td = $input.parent().parent().parent().parent().parent();
            refreshRadioDataValue($input, $td);
            storeValue($td);
        });
    }

    function addSingleSelectionClickEvent($events) {
        $events.off("click", ".data-type-SingleSelection td[data-value]");
        $events.on("click", ".data-type-SingleSelection td[data-value]", function() {
            var $td = $(this);
            var $tdTable = $td.parent().parent().parent();
            var $tdValue = $tdTable.parent();
            //if (isReadOnly($tdValue)) return;

            var selectedValue = $td.attr("data-value");
            GUI.setValue($tdValue, selectedValue);
            var $currentSelection = $tdValue.find("td[data-selected=true]");
            $currentSelection.attr("data-selected", "false");
            $td.attr("data-selected", "true")

            var success = storeValue($tdValue);
            if (success) {
                $tdTable.addClass("quickFsValueSaved");
            }
        });
    }

    function storeValue($td) {
        var answerId = $td.attr("data-answer-id");
        var organizationId = $td.attr("data-organization-id");
        var processStepFormId = $td.attr("data-process-step-form-id");
        var questionId = $td.attr("data-question-id");
        var tenderId = DATA.tenderId;
        var value = $td.attr("data-value");

        var success = CONTRACT_STRUCTURE.INTERFACE.saveAnswer(answerId, organizationId, processStepFormId, questionId, tenderId, value);

//        if (success) {
//            $td.addClass("quickFsValueSaved");
//        }

        return success;
    }

    function addActionBooleanEvent($events) {
        $events.off("click", ".action.boolean");
        $events.on("click", ".action.boolean", function() {
            var $td = $(this);
            if ($td.html() == "x") {
                $td.html("");
            } else {
                $td.html("x");
            }
        });
    }

    function addPopupEvent($events) {
        $events.off("click", ".action.popup");
        $events.on("click", ".action.popup", function() {
            var $td = $(this);
            var $tr = $td.parent();
            alert("row-id:" + $tr.attr("data-row-id") + ", column:" + $td.attr("data-column-id"));
        });
    }

    function addChangeContractStatusEvent($events) {
        $events.off("click", ".action.contractStatus-common");
        $events.on("click", ".action.contractStatus-common", function() {
            let $tr = $(this).parent().parent().parent().parent().parent().parent();
            let organizationId = $tr.attr("data-row-id");
            let classList = $(this).attr('class').split(/\s+/);
            $.each(classList, function(index, item) {
                if (item.startsWith("contractStatus-") && item !== "contractStatus-common") {
                    let contractStatus = item.split(/-/)[1];
                    INTERFACE.changeContractStatus(DATA.tenderId, organizationId, contractStatus);
                    return false;
                }
            });
        });
    }

    function addHideSubRowsEvent($events) {
        $events.off("click", ".action.hideSubRows");
        $events.on("click", ".action.hideSubRows", function() {
            var $tr = $(this).parent().parent();
            GUI.hideSubRows($tr);
        });
    }

    function addShowSubRowsEvent($events) {
        $events.off("click", ".action.showSubRows");
        $events.on("click", ".action.showSubRows", function() {
            var $tr = $(this).parent().parent();
            showSubRows($tr);
        });
    }

    function showSubRows($tr) {
        if (GUI.hasSubRows($tr)) {
            GUI.showSubRows($tr);
        } else {
            loadSubRows($tr);
        }
    }

    function addShowContractEvent($events) {
        $events.off("click", ".action.showContract");
        $events.on("click", ".action.showContract", function() {
            var $tr = $(this).parent().parent();
            showContract($tr);
        });
    }

    function showContract($tr) {
        var organizationId = $tr.attr("data-row-id");
        CONTRACT_STRUCTURE.GUI.setFilter(DATA.tenderId, organizationId);
        CONTRACT_STRUCTURE.ACTION.search();
    }

    function addOrderEvent($events) {
        $events.off("click", ".action.button.order");
        $events.on("click", ".action.button.order", function() {
            var $td = $(this).parent();
            var columnId = $td.attr("data-column-id");
            order(columnId, false);
        });
    }

    function addOrderDescEvent($events) {
        $events.off("click", ".action.button.orderDesc");
        $events.on("click", ".action.button.orderDesc", function() {
            var $td = $(this).parent();
            var columnId = $td.attr("data-column-id");
            order(columnId, true);
        });
    }

    function loadSubRows($tr) {
        var organizationId = $tr.attr("data-row-id");
        DATA.organizationId = organizationId;
        if (INTERFACE.loadPageSubRows()) {
            GUI.writeSubRows($tr);
        }
    }

    function addShowAnswersHistoryEvent($events) {
        $events.off("click", ".showAnswerHistoryButton");
        $events.on("click", ".showAnswerHistoryButton", function() {
            var $div = $(this);
            loadAnswersHistory($div);
        });
    }

    function loadAnswersHistory($div) {
        if ($div.html() == "") {
            var $td = $div.parent();
            var organizationId = $td.attr("data-organization-id");
            var processStepFormId = $td.attr("data-process-step-form-id");
            var questionId = $td.attr("data-question-id");
            var rowIndex = "0";
            var answerHistoryData = CONTRACT_STRUCTURE.INTERFACE.loadAnswersHistory(organizationId, processStepFormId, questionId, rowIndex);
            if (answerHistoryData) {
                CONTRACT_STRUCTURE.GUI.showAnswerHistory($div, answerHistoryData);
            }
        }
    }

    function addCloseAnswersHistoryEvent($events) {
        $events.off("click", ".closeAnswerHistoryButton");
        $events.on("click", ".closeAnswerHistoryButton", function() {
            var $div = $(this);
            if ($div.html() != "") {
                CONTRACT_STRUCTURE.GUI.removeAnswerHistory($div);
            }
        });
    }

    function order(columnId, desc){
        //INTERFACE.loadPage("finalSelectionPageReloadMock.json");
        alert("no function");
        GUI.viewPage()
    }

    function init(quickFS) {
        GUI = quickFS.GUI;
        INTERFACE = quickFS.INTERFACE;
        DATA = quickFS.DATA;
        CONTRACT_STRUCTURE = quickFS.CONTRACT_STRUCTURE;
        initEvents();
    }

}
