/*
 * Copyright 2020,2021 Panasonic 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.14
import QtQuick.Window 2.14
import QtQuick.Scene3D 2.14

import "./FPSItem"
import "./ACC"
import "./CruisingRange"
import "./Header"
import "./Map"
import "./Menu"
import "./Meter"
import "./ShiftPosition"
import "./Telltale"
import "./TurnByTurn"


Window {
    id: winl
    visible: true
    width: 1920
    height: 720
    color: "black"
    flags: Qt.FramelessWindowHint
    maximumWidth: width
    maximumHeight: height
    Item{
        id: rootItem
        width: 1920
        height: 720
        focus: true
        clip: true
        property int mode: 0 /* 0:normal 1:adas 2:map */
        property string car_state : "normal_default"
        property string arrow_state : "arrow_normal_default"
        property string set_state : "set_default"
        signal transNormalToAdas()
        signal transAdasToMap()
        signal transMapToNormal()

        signal keyPressed_Up()
        signal keyPressed_Down()
        signal keyPressed_Left()
        signal keyPressed_Right()
        signal keyPressed_Enter()
        signal keyPressed_Menu()


        Item{
            id:viewdata
            property int tbtArrow: 0
            property int tbtValue: 200

            onTbtArrowChanged: {
                turnByTurn.receivedArrowId = tbtArrow
                stage.received_id = tbtArrow
            }

            onTbtValueChanged: {
                turnByTurn.receivedTbtValue = tbtValue
            }
        }

        Item{
            id:acc3d_parts
            width:1920
            height:1080
            Item{
                id:acc3d
                Item{
                    id:ddditem
                    x:548
                    y:-23
                    width: 1920
                    height: 1080
                    scale:0.6
                    Scene3D {
                        anchors.fill: parent
                        aspects: ["input", "logic"]
                        multisample: false
                        cameraAspectRatioMode:Scene3D.UserAspectRatio
                        Stage {
                            id:stage
                            ACC_Animation{
                                property int direction_acc_line : 0
                                property int direction_acc_car : 0
                                id:accc_view
                                acc_line_pos: 1
                                acc_car_pos: 1
                            }
                        }
                    }

                }
            }

            Image{
                id: acc3d_mask
                width:1920
                height:720
                source: "qrc:/Images/ADASView/ACC/3D_parts_mask.ktx"
                visible:true

            }
            Image{ source:"qrc:/Images/ADASView/MAP/acc_cover.ktx"; width:1412; height:98; x:508; y:622 }

        }

        Map{
            id: map
        }

        TurnByTurn{
            id:turnByTurn
        }
        Menu{
            id: menu
        }
        Meter{
            id: meter
        }
        ShiftPosition{
            id:shiftPosition
            shiftId:0
        }
        CruisingRange {
            id: cruisingRange
            cruisingRangeValue : 750
        }

        Header{
            id:header
        }
        Telltale{
            id:telltale
        }

        Keys.onPressed: {

            switch(event.key){
                case(Qt.Key_C):

                    if(mode === 0){
                        transNormalToAdas();
                    }else if(mode === 1){
                        transAdasToMap();
                    }else if(mode === 2){
                        transMapToNormal()
                    }

                    mode++;
                    if(mode > 2) mode = 0;
                    break



            case(Qt.Key_1):
                if(shiftPosition.shiftId < 5) {
                    shiftPosition.shiftId++
                }else{
                    shiftPosition.shiftId = 0
                }
                break

            case(Qt.Key_2):
                if(accc_view.direction_acc_line === 0){
                    if(accc_view.acc_line_pos == 1) {
                        accc_view.acc_line_pos++
                        if(mode == 0){
                            rootItem.arrow_state = "arrow_normal_middle"
                        }else{
                            rootItem.arrow_state = "arrow_adas_middle"}
                        rootItem.set_state = "set_middle"
                    }else if(accc_view.acc_line_pos == 2){
                        accc_view.acc_line_pos++
                        if(mode == 0){
                            rootItem.arrow_state = "arrow_normal_near"
                        }else{
                            rootItem.arrow_state = "arrow_adas_near"}
                        rootItem.set_state = "set_near"
                    }else if(accc_view.acc_line_pos == 3){
                        accc_view.acc_line_pos--
                        if(mode == 0){
                            rootItem.arrow_state = "arrow_normal_middle"
                        }else{
                            rootItem.arrow_state = "arrow_adas_middle"}
                        rootItem.set_state = "set_middle"
                        accc_view.direction_acc_line = 1
                    }
                }else{
                    if(accc_view.acc_line_pos == 3) {
                        accc_view.acc_line_pos--
                        if(mode == 0){
                            rootItem.arrow_state = "arrow_normal_middle"
                        }else{
                            rootItem.arrow_state = "arrow_adas_middle"}
                        rootItem.set_state = "set_middle"
                    }else if(accc_view.acc_line_pos == 2){
                        accc_view.acc_line_pos--
                        if(mode == 0){
                            rootItem.arrow_state = "arrow_normal_default"
                        }else{
                            rootItem.arrow_state = "arrow_adas_default"}
                        rootItem.set_state = "set_default"
                    }else if(accc_view.acc_line_pos == 1){
                        accc_view.acc_line_pos++
                        if(mode == 0){
                            rootItem.arrow_state = "arrow_normal_middle"
                        }else{
                            rootItem.arrow_state = "arrow_adas_middle"}
                        rootItem.set_state = "set_middle"
                        accc_view.direction_acc_line = 0
                    }
                }
                break

            case(Qt.Key_3):
                if(accc_view.direction_acc_car == 0){
                    if(accc_view.acc_car_pos == 1) {
                        accc_view.acc_car_pos++
                        if(mode == 0){
                            rootItem.car_state = "nornal_middle"
                        }else{
                            rootItem.car_state = "adas_middle"}
                    }else if(accc_view.acc_car_pos == 2) {
                        accc_view.acc_car_pos++
                        if(mode == 0){
                            rootItem.car_state = "normal_near"
                        }else{
                            rootItem.car_state = "adas_near"}
                    }else if(accc_view.acc_car_pos == 3) {
                        accc_view.acc_car_pos--
                        accc_view.direction_acc_car = 1
                        if(mode == 0){
                            rootItem.car_state = "normal_middle"
                        }else{
                            rootItem.car_state = "adas_middle"}
                    }
                }else{
                    if(accc_view.acc_car_pos == 3) {
                        accc_view.acc_car_pos--
                        if(mode == 0){
                            rootItem.car_state = "normal_middle"
                        }else{
                            rootItem.car_state = "adas_middle"}
                    }else if(accc_view.acc_car_pos == 2) {
                        accc_view.acc_car_pos--
                        if(mode == 0){
                            rootItem.car_state = "normal_default"
                        }else{
                            rootItem.car_state = "adas_default"}
                    }else if(accc_view.acc_car_pos == 1){
                        accc_view.acc_car_pos++
                        accc_view.direction_acc_car = 0
                        if(mode == 0){
                            rootItem.car_state = "normal_middle"
                        }else{
                            rootItem.car_state = "adas_middle"}
                    }
                }
                break
            case(Qt.Key_4):
                telltaleSwitching();
                break

            case(Qt.Key_Up):
                keyPressed_Up()
                break

            case(Qt.Key_Down):
                keyPressed_Down()
                break

            case(Qt.Key_Left):
                keyPressed_Left()
                break

            case(Qt.Key_Right):
                keyPressed_Right()
                break

            case(Qt.Key_Space):
                keyPressed_Enter()
                break

            case(Qt.Key_M):
                keyPressed_Menu()
                break

            default:
                break


            }
       }


        Timer { //test
            property int num  : 0
            interval: 5000
            repeat: true
            running: true
            onTriggered: {
                num++;
                if(num == 5){num = 1}
                viewdata.tbtArrow = num;
            }
        }

        Timer { //test
            property int v  : 200
            interval: 5000
            repeat: true
            running: true
            onTriggered: {
                if(v - 20 >= 0){
                  v = v - 20
                }else{
                    v = 200
                }
                viewdata.tbtValue = v;
            }
        }
    }

//  FpsItem{}

    function telltaleSwitching(){
        telltale.telltaleMasterWarn = !telltale.telltaleMasterWarn
        telltale.telltaleGeneralWarn = !telltale.telltaleGeneralWarn
        telltale.telltaleBrakeEnergyRecovOff = !telltale.telltaleBrakeEnergyRecovOff
        telltale.telltaleBrakeEnergyRecovLv = !telltale.telltaleBrakeEnergyRecovLv
        telltale.telltaleMotorWarn = !telltale.telltaleMotorWarn
        telltale.telltalePopupHoodWarn = !telltale.telltalePopupHoodWarn
        telltale.telltaleDecharge = !telltale.telltaleDecharge
        telltale.telltaleEvSystemWarn = !telltale.telltaleEvSystemWarn
        telltale.telltaleChargingPlugWarn = !telltale.telltaleChargingPlugWarn
        telltale.telltaleLowBatt = !telltale.telltaleLowBatt
        telltale.telltaleBattWarn = !telltale.telltaleBattWarn
        telltale.telltaleBattTempWarn = !telltale.telltaleBattTempWarn
        telltale.telltaleHighVoltBattCut = !telltale.telltaleHighVoltBattCut
        telltale.telltaleAeb = !telltale.telltaleAeb
        telltale.telltaleLdw = !telltale.telltaleLdw
        telltale.telltaleBsd = !telltale.telltaleBsd
        telltale.telltaleSrsAirbag = !telltale.telltaleSrsAirbag
        telltale.telltaleEpsOff = !telltale.telltaleEpsOff
        telltale.telltaleBrake = !telltale.telltaleBrake
        telltale.telltaleAbsWarn = !telltale.telltaleAbsWarn
        telltale.telltaleEspAct = !telltale.telltaleEspAct
        telltale.telltaleHillDescent = !telltale.telltaleHillDescent
        telltale.telltaleAutoParking = !telltale.telltaleAutoParking
        telltale.telltaleTpmsInd = !telltale.telltaleTpmsInd
        telltale.telltaleImmobi = !telltale.telltaleImmobi
        telltale.telltaleDoor = !telltale.telltaleDoor
        telltale.telltaleSeatbelt = !telltale.telltaleSeatbelt
        telltale.telltaleSeatbelt2 = !telltale.telltaleSeatbelt2
        telltale.telltaleEpbWarn = !telltale.telltaleEpbWarn
        telltale.telltaleEps= !telltale.telltaleEps
        telltale.telltaleHighbeamAssist = !telltale.telltaleHighbeamAssist
        telltale.telltaleHighbeam = !telltale.telltaleHighbeam
        telltale.telltaleRearFog = !telltale.telltaleRearFog
        telltale.telltaleLowbeam = !telltale.telltaleLowbeam
        telltale.telltalePosition = !telltale.telltalePosition
    }
}