import QtQuick 2.14
import QtQuick.Controls 2.14
import QtQuick.Layouts 1.14
import QtQml 2.14
import QtQml.Models 2.14
import QtGraphicalEffects 1.0
import QtQuick.Dialogs 1.3
import QtQuick.Window 2.2

Rectangle {
    property QtObject trackBuffer: modelData
    id : defaultTrackBody
    clip: true
    width: multitrack.width 
    height: trackHeight
    color: activePalette.dark
    border.color: activePalette.button
    border.width: 1
    Repeater {
        model: modelData.clips
        delegate: Rectangle {
            Connections {
                target: recordButton
                onRecordingChanged: {
                    if (flag) {
                        savePcapDialog.open()
                    }
                    else {
                        timeline.recording = false
                        modelData.setRecord(false)
                    }
                }
            }
            FileDialog {
                id: savePcapDialog
                title: "Save pcap file"
                selectExisting: false
                nameFilters: ["pcap files (*.pcap)"]
                onAccepted: {
                    console.log(savePcapDialog.fileUrl)
                    modelData.setRecord(true, savePcapDialog.fileUrl)
                    timeline.recording = true
                }
            }
            Rectangle {
                clip: true
                anchors.left: parent.right
                anchors.leftMargin: Math.max(0, Math.min(1, (modelData.beginSeconds - rulerTimeBegin) / rulerTimeDuration)) * (multitrack.width - headWidth)
                width: Math.max(0, Math.min(1, (modelData.endSeconds - rulerTimeBegin) / rulerTimeDuration)) * (multitrack.width - headWidth) - anchors.leftMargin
                height: trackHeight
                color: activePalette.midlight
                border.color: activePalette.light
                border.width: 0
                Rectangle {
                    anchors.left: parent.left
                    color: activePalette.highlight
                    width: timeCursorCol.x - headWidth - parent.x
                    height: parent.height
                }
                MouseArea {
                    id: forClick
                    anchors.fill: parent
                    acceptedButtons: Qt.RightButton
                    propagateComposedEvents: true
                    property bool toolbar: false
                    onClicked: {
                        clipMenu.popup()         
                    }                
                }
                // Repeater {
                //     id: frameRuler
                //     property QtObject clipBuffer: modelData
                //     property var maxRulerNum: {
                //         var clip_width = (modelData.endSeconds - modelData.beginSeconds) / rulerTimeDuration * (multitrack.width - headWidth) - anchors.leftMargin
                //         return Math.ceil(clip_width / 50)
                //     }
                //     model: Math.min(maxRulerNum * 2, modelData.frameCount)
                //     property var rulerStep: Math.max(1, Math.floor(modelData.frameCount / maxRulerNum))
                //     Rectangle {
                //         anchors.top: parent.top
                //         width: 1
                //         height: trackHeight * 0.25
                //         color: "red"
                //         property var frameID: index * frameRuler.rulerStep
                //         x: (frameRuler.clipBuffer.getFrameStartSeconds(frameID) - rulerTimeBegin) / rulerTimeDuration * (multitrack.width - headWidth) - anchors.leftMargin
                //         Label {
                //             anchors.horizontalCenter: parent.horizontalCenter
                //             anchors.top: parent.bottom
                //             color: "red"
                //             text: frameID
                //             
                //         }
                //     }
                // }
                DefaultMenu {
                    parent: defaultTrackBody
                    id : clipMenu
                    title: "Clip Menu"
                    DefaultMenuItem {
                        text: "Reset"
                        
                        onClicked: {
                            modelData.reset()
                        }
                    }
                    DefaultMenuItem {
                        Connections {
                            target: playButton
                            onPlayingChanged: {
                                modelData.loading = flag
                            }
                        }
                        text: modelData.loading ? "Pause" : "Start"
                        onClicked: {
                            modelData.loading = !modelData.loading
                        }
                    }
                    DefaultMenuItem {
                        text: "Delete Track"
                        onClicked: {
                            trackBuffer.deleteTrack();
                        }
                    }
                    DefaultMenuItem {
                        text: "Cancel"
                    }
                }
            }
        }
    }
}