//
//  PreferencesDialog.qml
//
//  Created by Bradley Austin Davis on 24 Jan 2016
//  Copyright 2016 High Fidelity, Inc.
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

import QtQuick 2.5
import QtQuick.Controls 1.4

import "../controls-uit" as HifiControls
import "../styles-uit"
import "../windows"
import "preferences"

ScrollingWindow {
    id: root
    title: "Preferences"
    resizable: true
    destroyOnHidden: true
    width: 500
    height: 577
    property var sections: []
    property var showCategories: []
    minSize: Qt.vector2d(400, 500)

    HifiConstants { id: hifi }

    function saveAll() {
        for (var i = 0; i < sections.length; ++i) {
            var section = sections[i];
            section.saveAll();
        }
        destroy();
    }

    function restoreAll() {
        for (var i = 0; i < sections.length; ++i) {
            var section = sections[i];
            section.restoreAll();
        }
        destroy();
    }

    Column {
        width: pane.contentWidth

        Component {
            id: sectionBuilder
            Section { }
        }

        Component.onCompleted: {
            var categories = Preferences.categories;
            var i;

            // build a map of valid categories.
            var categoryMap = {};
            for (i = 0; i < categories.length; i++) {
                categoryMap[categories[i]] = true;
            }

            // create a section for each valid category in showCategories
            // NOTE: the sort order of items in the showCategories array is the same order in the dialog.
            for (i = 0; i < showCategories.length; i++) {
                if (categoryMap[showCategories[i]]) {
                    sections.push(sectionBuilder.createObject(prefControls, {name: showCategories[i]}));
                }
            }

            if (sections.length) {
                // Default sections to expanded/collapsed as appropriate for dialog.
                if (sections.length === 1) {
                    sections[0].collapsable = false
                    sections[0].expanded = true
                } else {
                    for (i = 0; i < sections.length; i++) {
                        sections[i].collapsable = true;
                        sections[i].expanded = true;
                    }
                }
                sections[0].isFirst = true;
                sections[sections.length - 1].isLast = true;
            }
        }

        Column {
            id: prefControls
            width: pane.contentWidth
        }
    }

    footer: Row {
        anchors {
            top: parent.top
            right: parent.right
            rightMargin: hifi.dimensions.contentMargin.x
        }
        spacing: hifi.dimensions.contentSpacing.x

        HifiControls.Button {
            text: "Save changes"
            color: hifi.buttons.blue
            onClicked: root.saveAll()
        }

        HifiControls.Button {
            text: "Cancel"
            color: hifi.buttons.white
            onClicked: root.restoreAll()
        }
    }
}