// Copyright (c) 2000-2017 Ericsson Telecom AB                                                       //
// All rights reserved. This program and the accompanying materials are made available under the     //
// terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at //
// http://www.eclipse.org/legal/epl-v10.html                                                         //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_SetupTabs(a_viewmodel, a_options) {
    "use strict";
    
    /** constructor */
    
    var m_Binder;
    var m_options = a_options;
    var m_setupModel = a_viewmodel.getSetupModel();
    var m_setupList = a_viewmodel.getSetupList();
    var m_hierarchy = m_options.hierarchy;
    var m_parentViewmodel = a_viewmodel;
    var m_conditionViewmodels = [];
    var m_setupName = m_setupModel.getSetup().name;
    var m_setupParams = m_setupModel.getSetup().setupParams;
    
    function insertMissingSetups() {
        var otherOrganizer = {"displayName": "other", "type": "organizer", "menuElements": []};
        var setupsInHierarchy = [];
        findAllSetupsInHierarchy(setupsInHierarchy, m_hierarchy.menuElements);
        for (var i = 0; i < m_setupList.length; ++i) {
            if (setupsInHierarchy.indexOf(m_setupList[i]) == -1)
                otherOrganizer.menuElements.push({"setupName": m_setupList[i], "type": "setup"});
        }
        if (otherOrganizer.menuElements.length > 0)
            m_hierarchy.menuElements.push(otherOrganizer);
    }
    
    function findAllSetupsInHierarchy(aFoundSetups, aMenuElements) {
        for (var i = 0; i < aMenuElements.length; ++i) {
            if (aMenuElements[i].setupName != undefined) {
                aFoundSetups.push(aMenuElements[i].setupName);
            }
            if (aMenuElements[i].menuElements != undefined) {
                findAllSetupsInHierarchy(aFoundSetups, aMenuElements[i].menuElements);
            }
        }
    }
    
    if (m_options.displayOtherSetups)
        insertMissingSetups();
    
    var m_this = this;
    
    /** public functions - interface for parent */
    
    this.setBinder = function(aBinder)
    {
        m_Binder = aBinder;
    };
    
    this.setReponseDataPath = function(aIndex, aPath) {
        m_conditionViewmodels[aIndex] = new CViewModel_Condition(m_parentViewmodel, {});
        m_conditionViewmodels[aIndex].setReponseDataPath(0, aPath);
    };
    
    /** public functions - interface for views */
    
    this.getRecursiveSetups = function(callback)
    {
        return new CViewmodel_RecursiveSetups(m_this, m_hierarchy.menuElements, m_this.getFullNameOfSetup(m_setupName, m_setupParams), []);
    };
    
    /** public functions - interface for subviewmodels */
    
    this.select = function(a_setup, a_setupParams)
    {
        m_parentViewmodel.loadSetup(a_setup, a_setupParams);
    };
    
    this.checkVisibility = function(dataPathIndex) {
        if (m_conditionViewmodels[dataPathIndex] != undefined) {
            return m_conditionViewmodels[dataPathIndex].getState();
        } else {
            return true;
        }
    };
    
    this.getFullNameOfSetup = function(setupName, setupParams) {
        var name = setupName;
        if (setupParams != undefined) {
            name += "_" + JSON.stringify(setupParams);
        }
        return name;
    };
};

function CViewmodel_RecursiveSetups(a_parentViewmodel, a_menuElements, a_selectedSetupName, a_organizerNames) {
    "use strict";
    var m_setupList = [];
    var m_setupNameList = [];
    var m_setupParamsList = [];
    var m_menuElements = a_menuElements;
    var m_selectedIndex = 0;
    var m_subViewModels = [];
    var m_parentViewmodel = a_parentViewmodel;
    var m_selectedSetupName = a_selectedSetupName;
    var m_organizerNames = a_organizerNames;
    var m_this = this;
    
    var counter = 0;
    var selectedElementIsFound = false;
    for (var i = 0; i < m_menuElements.length; ++i) {
        if (m_menuElements[i].isVisible == undefined || m_parentViewmodel.checkVisibility(m_menuElements[i].isVisible)) {
            if (m_selectedSetupName != undefined && m_menuElements[i] && m_selectedSetupName == m_parentViewmodel.getFullNameOfSetup(m_menuElements[i].setupName, m_menuElements[i].setupParams)) {
                m_selectedIndex = counter;
                localStorage.setItem(getKey(), counter);
                selectedElementIsFound = true;
                break;
            }
            ++counter;
        }
    }
        
    counter = 0;
    for (var i = 0; i < m_menuElements.length; ++i) 
    {
        if (m_menuElements[i].isVisible == undefined || m_parentViewmodel.checkVisibility(m_menuElements[i].isVisible)) {
            if (m_menuElements[i].displayName)
                m_setupList[counter] = [m_menuElements[i].displayName];
            else
                m_setupList[counter] = [m_menuElements[i].setupName];
            m_setupNameList[counter] = m_menuElements[i].setupName;
            m_setupParamsList[counter] = m_menuElements[i].setupParams;
            var setupToSelect;
            if (!selectedElementIsFound)
                setupToSelect = m_selectedSetupName;
            if (m_menuElements[i].menuElements && m_menuElements[i].menuElements.length) {
                var organizerPath = mcopy(m_organizerNames);
                organizerPath.push(m_menuElements[i].displayName);
                m_subViewModels[counter] = new CViewmodel_RecursiveSetups(m_parentViewmodel, m_menuElements[i].menuElements, setupToSelect, organizerPath);
                if (m_subViewModels[counter].isSelectedElementFound()) {
                    m_selectedIndex = counter;
                    localStorage.setItem(getKey(), counter);
                    selectedElementIsFound = true;
                }
            }
            
            ++counter;
        }
    }
    
    this.getSubViewModels = function()
    {
        return m_subViewModels;
    };
    
    this.getselectedSetup = function()
    {
        var selectedIndex = localStorage.getItem(getKey());
        if (selectedIndex == undefined || selectedIndex >= m_setupNameList.length) {
            selectedIndex = m_selectedIndex;
        }
        
        var selectedSetupName;
        if (!m_subViewModels[selectedIndex])
           return [m_setupNameList[selectedIndex], m_setupParamsList[selectedIndex]];
        else
           return m_subViewModels[selectedIndex].getselectedSetup();
    };

    this.getList = function()
    {
        return {
            selections: [[m_selectedIndex]],
            values: [m_setupList]
        };
    };
    
    this.select = function(a_Index)
    {
        m_selectedIndex = a_Index;
        localStorage.setItem(getKey(), m_selectedIndex);
        var selected = m_this.getselectedSetup();
        m_parentViewmodel.select(selected[0], selected[1]);
    };
    
    this.isSelectedElementFound = function() {
        return selectedElementIsFound;
    };
    
    function getKey() {
        var key = "setupTabSelection";
        for (var i = 0; i < m_organizerNames.length; ++i) {
            key += "_" + m_organizerNames[i];
        }
        return key;
    }
}

CViewModel_SetupTabs.getHelp = function() {
    return "A viewmodel that contains the setup hierarchy.";
};

CViewModel_SetupTabs.providesInterface = function() {
    return ["getRecursiveSetups"];
};

CViewModel_SetupTabs.getCustomDataSchema = function() {
    return {
        "$schema" : "http://json-schema.org/draft-04/schema#",
        "definitions": {
            "setup": {
                "title": "Setup",
                "description": "defines a setup",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "displayName": {
                        "title": "display name",
                        "description": "the name that is displayed",
                        "type": "string"
                    },
                    "setupName": {
                        "title": "setup name",
                        "description": "the name of the setup",
                        "type": "string"
                    },
                    "type": {
                        "type": "string",
                        "enum": ["setup"]
                    },
                    "isVisible": {
                        "type": "integer",
                        "description": "the data path index of a connected request that returns a bool value or contains a filter"
                    },
                    "setupParams": {
                        "type": "object",
                        "additionalProperties": true,
                        "properties": {}
                    }
                },
                "required": ["setupName", "type"]
            },
            "organizer": {
                "title": "Organizer",
                "description": "defines an organizer which can contain additional organizers and setups",
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "displayName": {
                        "title": "display name",
                        "description": "the name that is displayed",
                        "type": "string"
                    },
                    "type": {
                        "type": "string",
                        "enum": ["organizer"]
                    },
                    "menuElements": {
                        "$ref" : "#/definitions/menuElements"
                    },
                    "isVisible": {
                        "type": "integer",
                        "description": "the data path index of a connected request that returns a bool value or contains a filter"
                    }
                },
                "required" : ["displayName", "type"]
            },
            "menuElements": {
                "title": "Menu elements",
                "description": "the list of menu elements",
                "type": "array",
                "format": "tabs",
                "items": {
                    "title": "menu element",
                    "oneOf" : [
                        {
                            "$ref" : "#/definitions/organizer"
                        },
                        {
                            "$ref" : "#/definitions/setup"
                        }
                    ]
                }
            }
        },
        "title": "Setup hierarchy",
        "type" : "object",
        "additionalProperties" : false,
        "properties" : {
            "hierarchy": {
                "description": "The setup hierarchy.",
                "type": "object",
                "properties": {
                    "menuElements" : {
                        "$ref" : "#/definitions/menuElements"
                    }
                },
                "additionalProperties" : false
            },
            "displayOtherSetups": {
                "description": "Whether we want to display the other setups not included in the hierarchy.",
                "type": "boolean",
                "format": "checkbox",
                "default": true
            }
        }
    };
};

//# sourceURL=CustomizableApp\ViewModels\ViewModel_SetupTabs.js
