/*
 * Copyright (c) 2019 TOYOTA MOTOR CORPORATION
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import QtQuick 2.6
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.0
import '..'
import './keyboard'

ApplicationWindow {
    id: root
    width: 1080 * screenInfo.scale_factor()
    height: 1487 * screenInfo.scale_factor()
//    icon: '/logfile/images/HMI_Settings_LogFile.svg'
    title: 'LogFile'
    property string trippath: ''
    property string rootpath: ''
    property var targets: new Array()

    Bar {
        id: tabbar
        anchors.top: parent.top
        anchors.topMargin: 200
        onCurrentIndexChanged: {
            keyboard.visible = false
        }
    }

    StackLayout {
        id: pages
        anchors.left: tabbar.left
        anchors.right: tabbar.right
        anchors.top: tabbar.bottom
        currentIndex: tabbar.currentIndex
        LogSave { id: logsave }
        LogPlay { id: logplay }
        TouchLogPlay { id: touchlogplay }
    }

    Keyboard {
        id: keyboard
        anchors.bottom: parent.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        active: numbers
        onVisibleChanged: {
            var children = pages.children
            for(var child in children) {
                if(children[child].visible) {
                    children[child].resetPosition()
                    break;
                }
            }
        }
        Numbers {
            id: numbers
            anchors.left: parent.left
            anchors.right: parent.right
            anchors.leftMargin: parent.height / 2
            anchors.rightMargin: parent.height / 2
            target: parent.target
            onHide: {
                keyboard.visible = false
                target.focus = false
            }
            onNext: {
                var nexttarget
                for(var i = 0; i < targets.length; i++) {
                    if(targets[i] === target) {
                        for(var j = i, k = 0; k < targets.length; k++) {
                            if(j === targets.length-1) {
                                j = 0;
                            }
                            else {
                                j++;
                            }
                            if(targets[j].visible) {
                                target.focus = false
                                nexttarget = targets[j]
                                nexttarget.focus = true
                                break;
                            }
                        }
                        break;
                    }
                }
            }
        }
    }

    onVisibleChanged: {
        if(!visible) {
            keyboard.visible = false
        }
    }

    function updateKeyBoard() {
        var textfield = 0
        for(var i = 0; i < targets.length; i++) {
            if(targets[i].focus) {
                textfield = targets[i]
            }
        }

        if(textfield === 0) {
            keyboard.visible = false
            return
        }
        else {
            keyboard.target = textfield
            keyboard.visible = true
        }

        var implicity = 0.0
        for(var itext = textfield; itext !== pages; itext = itext.parent) {
            implicity += itext.y
        }
        implicity += itext.y

        var keyboardy = implicity + textfield.height
        if(keyboard.y < keyboardy) {
            var children = pages.children
            for(var child in children) {
                if(children[child].visible) {
                    children[child].adjustPosition(keyboardy - keyboard.y)
                    break;
                }
            }
        }
    }

    function addTarget(target) {
        targets.push(target)
    }
}