/*
 * 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 LogSaveImpl 1.0
import '..'

ColumnLayout {
    property int blankheight : 50
    property bool saving : false

    anchors.left: parent.left
    anchors.right: parent.right

    Item { height:blankheight }
    RowLayout {
        anchors.left: parent.left
        anchors.right: parent.right
        Label {
            text: 'CurPath  :  '
            color: 'white'
        }
        Label {
            id: logpath
            text: ''
            color: 'white'
            font.italic: true
            font.pixelSize: 20
        }
    }

    // Can log
    Item { height:blankheight/3 }
    Image {
        width: tabbar.width
        source: '../images/HMI_Settings_DividingLine.svg'
    }
    Item { height:blankheight/3 }
    RowLayout {
        anchors.left: parent.left
        anchors.right: parent.right
        Label { text: 'CAN'; color: '#59FF7F' }
        Switch { id: canswitch;anchors.right: parent.right }
    }
//    Item { height:blankheight/3 }
    CANLog {}

    // Touch log
    Item { height:blankheight/3 }
    Image {
        width: tabbar.width
        source: '../images/HMI_Settings_DividingLine.svg'
    }
    Item { height:blankheight/3 }
    RowLayout {
        anchors.left: parent.left
        anchors.right: parent.right
        Label { text: 'Touch'; color: '#59FF7F' }
        Switch { id: touchswitch;anchors.right: parent.right }
    }
//    Item { height:blankheight/3 }
    TouchLog {}

    // Video log
    Item { height:blankheight/3 }
    Image {
        width: tabbar.width
        source: '../images/HMI_Settings_DividingLine.svg'
    }
    Item { height:blankheight/3 }
    RowLayout {
        anchors.left: parent.left
        anchors.right: parent.right
        Label { text: 'Video'; color: '#59FF7F' }
        Switch { id: videoswitch;anchors.right: parent.right }
    }
//    Item { height:blankheight/3 }
    VideoLog { id: videolog }

    //Audio log
    Item { height:blankheight/3 }
    Image {
        width: tabbar.width
        source: '../images/HMI_Settings_DividingLine.svg'
    }
    Item { height:blankheight/3 }
    RowLayout {
        anchors.left: parent.left
        anchors.right: parent.right
        Label { text: 'Audio'; color: '#59FF7F' }
        Switch { id: audioswitch;anchors.right: parent.right }
    }
//    Item { height:blankheight/3 }
    AudioLog { id: audiolog }

    //Status bar
    Item { height:blankheight/3 }
    Image {
        width: tabbar.width
        source: '../images/HMI_Settings_DividingLine.svg'
    }
    Item { height:blankheight/3 }
    RowLayout {
        Label {
            text: 'Status: '
            color: '#59FF7F'
        }
        Label {
            id: recordstatus
            property int hour: 0
            property int minute: 0
            property int second: 0
            property string duration: ''
            text: saving ? ('Log Saving... '+ duration) : (hour > 0 || minute > 0 || second > 0) ? ('Duration: ' + duration) : 'Press SaveStart to save log file.'
            font.pixelSize: 30
            Timer {
                id: timer
                property double seconds: 0
                interval: 1000
                running: false
                repeat: true
                onTriggered: {
                    if(saving) {
                        seconds++
                        parent.hour = seconds/(60*60)
                        parent.minute = parent.hour > 0 ? seconds%(60*60)/60 : seconds/60
                        parent.second = seconds - parent.hour*(60*60) - parent.minute*60
                        parent.duration = (parent.hour > 0 ? (parent.hour + 'h ') : '')+(parent.minute > 0 ? (parent.minute + 'm ') : '')+(parent.second > 0 ? (parent.second + 's') : '')
                    }
                }
            }
        }
    }

    // Buttons
    Item { height:blankheight/3 }
    RowLayout {
        anchors.left: parent.left
        anchors.right: parent.right
        Button {
            id: savestart
            anchors.horizontalCenter: parent.horizontalCenter
            text: saving ? 'SaveStop' : 'SaveStart'
            highlighted: true
            onClicked: {
                if(!saving && (canswitch.checked || touchswitch.checked || videoswitch.checked || audioswitch.checked)) {
                    if(logsaveimpl.createLogFolders()) {
                        logpath.text = logsaveimpl.getCurrentSeg()

                        if(canswitch.checked) {
                            logsaveimpl.setCANProperty()
                        }

                        if(touchswitch.checked) {
                            logsaveimpl.setTouchProperty()
                        }

                        if(videoswitch.checked) {
                            logsaveimpl.setVideoProperty(videolog.properties)
                        }

                        if(audioswitch.checked) {
                            logsaveimpl.setAudioProperty(audiolog.currentsps)
                        }

                        console.log("touchswitch.checked: " + touchswitch.checked)
                        if(logsaveimpl.saveStart(canswitch.checked, touchswitch.checked, videoswitch.checked, audioswitch.checked)) {
                            recordstatus.hour = recordstatus.minute = recordstatus.second = 0
                            recordstatus.duration = ''
                            timer.seconds = 0
                            timer.start()
                            saving = true
                        }
                    }
                }else if(saving) {
                    logsaveimpl.saveStop()
                    saving = false
                    timer.stop()
                }
            }
        }
    }
    LogSaveImpl {
        id: logsaveimpl
    }
    Component.onCompleted: {
        if(logsaveimpl.createTripFolder()) {
            logpath.text = trippath = logsaveimpl.getCurrentTrip()
        }
        else {
            logpath.text = ""
        }
    }

    onVisibleChanged: {
        if(!visible) {
            resetPosition()
        }
    }

    function adjustPosition(offset) {
        y -= offset
        var heights = 0
        for(var child in children) {
            heights += children[child].height
            if(heights <= offset) {
                children[child].opacity = 0
            }
            else {
                children[child].opacity = 0
                break
            }
        }
    }

    function resetPosition() {
        var children = logsave.children
        for(var child in children) {
            children[child].opacity = 1
        }
        logsave.y = 0
    }
}