/**
 * Copyright (C) 2020 by Savoir-faire Linux
 * Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com>
 * Author: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
 * Author: Aline Gondim Santos <aline.gondimsantos@savoirfairelinux.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
import QtQuick 2.14
import QtQuick.Controls 2.14
import QtGraphicalEffects 1.12
import net.jami.Models 1.0

import "../../commoncomponents"

import "../js/videodevicecontextmenuitemcreation.js" as VideoDeviceContextMenuItemCreation
import "../js/selectscreenwindowcreation.js" as SelectScreenWindowCreation

Menu {
    id: root

    property int generalMenuSeparatorCount: 0
    property int commonBorderWidth: 1

    signal pluginItemClicked

    font.pointSize: JamiTheme.textFontSize+3

    property bool isSIP: false
    property bool isPaused: false
    property bool isAudioOnly: false
    property bool isRecording: false

    signal transferCallButtonClicked

    function activate() {
        var deviceContextMenuInfoMap = AvAdapter.populateVideoDeviceContextMenuItem()
        /*
         * Somehow, the map size is undefined, so use this instead.
         */
        var mapSize = deviceContextMenuInfoMap["size"]

        var count = 2
        for (var deviceName in deviceContextMenuInfoMap) {
            if (deviceName === "size" || root.isAudioOnly)
                continue
            if (videoDeviceItem.itemName === "No video device") {
                videoDeviceItem.checkable = true
                videoDeviceItem.itemName = deviceName
                videoDeviceItem.checked = deviceContextMenuInfoMap[deviceName]
                if (count === mapSize)
                    root.open()
            } else {
                VideoDeviceContextMenuItemCreation.createVideoDeviceContextMenuItemObjects(
                            deviceName, deviceContextMenuInfoMap[deviceName],
                            count === mapSize)
            }
            count++
        }
        root.open()
    }

    Component.onCompleted: {
        VideoDeviceContextMenuItemCreation.setVideoContextMenuObject(root)
    }


    onClosed: {
        videoDeviceItem.itemName = "No video device"
        VideoDeviceContextMenuItemCreation.removeCreatedItems()
    }

    JamiFileDialog {
        id: jamiFileDialog

        mode: JamiFileDialog.Mode.OpenFile

        onAccepted: {
            // No need to trim file:///.
            AvAdapter.shareFile(jamiFileDialog.file)
        }
    }

    /*
     * All GeneralMenuItems should remain the same width / height.
     */
    GeneralMenuItem {
        id: holdCallButton

        visible: isSIP
        height: isSIP? undefined : 0

        itemName: isPaused? qsTr("Resume call") : qsTr("Hold call")
        iconSource: isPaused? "qrc:/images/icons/play_circle_outline-24px.svg" : "qrc:/images/icons/pause_circle_outline-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            CallAdapter.holdThisCallToggle()
            root.close()
        }
    }

    GeneralMenuItem {
        id: showSipInputPanelButton

        visible: isSIP
        height: isSIP? undefined : 0

        itemName: qsTr("Sip Input Panel")
        iconSource: "qrc:/images/icons/ic_keypad.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            root.close()
            sipInputPanel.open()
        }
    }

    GeneralMenuItem {
        id: transferCallButton

        visible: isSIP
        height: isSIP? undefined : 0

        itemName: qsTr("Transfer call")
        iconSource: "qrc:/images/icons/phone_forwarded-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            root.transferCallButtonClicked()
            root.close()
        }
    }

    GeneralMenuSeparator {
        preferredWidth: startRecordingItem.preferredWidth
        preferredHeight: commonBorderWidth

        visible: isSIP
        height: isSIP? undefined : 0

        Component.onCompleted: {
            generalMenuSeparatorCount++
        }
    }

    GeneralMenuItem {
        id: startRecordingItem

        itemName: isRecording? qsTr("Stop recording") : qsTr("Start recording")
        iconSource: "qrc:/images/icons/ic_video_call_24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            root.close()
            CallAdapter.recordThisCallToggle()
        }
    }

    GeneralMenuItem {
        id: fullScreenItem

        itemName: videoCallPage.isFullscreen ? qsTr("Exit full screen") : qsTr(
                                     "Full screen mode")
        iconSource: videoCallPage.isFullscreen ? "qrc:/images/icons/close_fullscreen-24px.svg" : "qrc:/images/icons/open_in_full-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            root.close()
            videoCallPageRect.needToShowInFullScreen()
        }
    }

    GeneralMenuSeparator {
        preferredWidth: startRecordingItem.preferredWidth
        preferredHeight: commonBorderWidth

        Component.onCompleted: {
            generalMenuSeparatorCount++
        }
    }

    VideoCallPageContextMenuDeviceItem {
        id: videoDeviceItem
        visible: !isAudioOnly
        height: !isAudioOnly? undefined : 0

        contextMenuPreferredWidth: root.implicitWidth
    }

    GeneralMenuSeparator {
        preferredWidth: startRecordingItem.preferredWidth
        preferredHeight: commonBorderWidth
        visible: !isAudioOnly
        height: !isAudioOnly? undefined : 0

        Component.onCompleted: {
            generalMenuSeparatorCount++
        }
    }

    GeneralMenuItem {
        id: shareEntireScreenItem

        itemName: qsTr("Share entire screen")
        iconSource: "qrc:/images/icons/screen_share-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth
        visible: !isAudioOnly
        height: !isAudioOnly? undefined : 0

        onClicked: {
            root.close()
            if (Qt.application.screens.length === 1) {
                AvAdapter.shareEntireScreen(0)
            } else {
                SelectScreenWindowCreation.createSelectScreenWindowObject()
                SelectScreenWindowCreation.showSelectScreenWindow()
            }
        }
    }

    GeneralMenuItem {
        id: shareScreenAreaItem

        itemName: qsTr("Share screen area")
        iconSource: "qrc:/images/icons/screen_share-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth
        visible: !isAudioOnly
        height: !isAudioOnly? undefined : 0

        onClicked: {
            root.close()
            if (Qt.application.screens.length === 1) {
                ScreenRubberBandCreation.createScreenRubberBandWindowObject(
                            null, 0)
                ScreenRubberBandCreation.showScreenRubberBandWindow()
            } else {
                SelectScreenWindowCreation.createSelectScreenWindowObject(true)
                SelectScreenWindowCreation.showSelectScreenWindow()
            }
        }
    }

    GeneralMenuItem {
        id: shareFileItem

        itemName: qsTr("Share file")
        iconSource: "qrc:/images/icons/insert_photo-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth
        visible: !isAudioOnly
        height: !isAudioOnly? undefined : 0

        onClicked: {
            root.close()
            jamiFileDialog.open()
        }
    }

    /* TODO: In the future we want to implement this

    GeneralMenuItem {
        id: advancedInfosItem

        itemName: qsTr("Advanced informations")
        iconSource: "qrc:/images/icons/info-24px.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            root.close()
        }
    }*/

    GeneralMenuItem {
        id: pluginItem

        itemName: qsTr("Toggle plugin")
        iconSource: "qrc:/images/icons/extension_24dp.svg"
        leftBorderWidth: commonBorderWidth
        rightBorderWidth: commonBorderWidth

        onClicked: {
            root.pluginItemClicked()
            root.close()
        }
    }

    background: Rectangle {
        implicitWidth: startRecordingItem.preferredWidth
        implicitHeight: startRecordingItem.preferredHeight
                        * (root.count
                          - (isSIP? 0 : 2)
                          - (isAudioOnly? 6 : 0)
                          - generalMenuSeparatorCount)

        border.width: commonBorderWidth
        border.color: JamiTheme.tabbarBorderColor
    }
}

