//
//  InitialLaunchWindow.qml
//
//  Copyright 2019 High Fidelity, Inc.
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

import QtQuick 2.10
import QtQuick.Controls 2.3
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.3
import stylesUit 1.0 as HifiStylesUit
import TabletScriptingInterface 1.0
import hifi.simplifiedUI.simplifiedConstants 1.0 as SimplifiedConstants
import hifi.simplifiedUI.simplifiedControls 1.0 as SimplifiedControls

Rectangle {
    id: root
    color: simplifiedUI.colors.white
    anchors.fill: parent
    property bool landscapeOrientation: root.width > root.height

    SimplifiedConstants.SimplifiedConstants {
        id: simplifiedUI
    }

    Component.onCompleted: {
        if (Settings.getValue("simplifiedUI/alreadyAutoSelectedAvatarFromInventory", false) || 
            Settings.getValue("simplifiedUI/closedAvatarPageOfInitialLaunchWindow", false)) {
            tempAvatarPageContainer.visible = false;
            controlsContainer.visible = true;
        }
    }

    Item {
        id: tempAvatarPageContainer
        anchors.fill: parent

        Flickable {
            id: tempAvatarPageFlickable
            anchors.top: parent.top
            anchors.left: parent.left
            anchors.leftMargin: 16
            anchors.right: parent.right
            anchors.rightMargin: 16
            anchors.bottom: continueLink.top
            clip: true
            contentWidth: parent.width
            contentHeight: tempAvatarPageGrid.heights
            interactive: contentHeight > height

            RowLayout {
                id: tempAvatarPageGrid
                width: parent.width

                Image {
                    Layout.preferredWidth: 428
                    Layout.minimumHeight: 240
                    Layout.maximumHeight: 800
                    Layout.fillHeight: true
                    source: resourceDirectoryUrl + "qml/hifi/simplifiedUI/avatarApp/images/" +
                        MyAvatar.skeletonModelURL.substring(MyAvatar.skeletonModelURL.indexOf("simplifiedAvatar"), MyAvatar.skeletonModelURL.lastIndexOf("/")) + ".png"
                    mipmap: true
                    fillMode: Image.PreserveAspectFit
                }

                Item {
                    id: textAndQRContainer
                    Layout.minimumWidth: 300
                    Layout.maximumWidth: 1680
                    Layout.fillWidth: true
                    Layout.preferredHeight: childrenRect.height

                    HifiStylesUit.RalewayBold {
                        id: headerText
                        text: "We know this isn't you..."
                        color: simplifiedUI.colors.text.black
                        size: 48
                        height: paintedHeight
                        wrapMode: Text.Wrap
                        anchors.top: parent.top
                        anchors.topMargin: 120
                        anchors.left: parent.left
                        anchors.right: parent.right
                    }

                    HifiStylesUit.RalewayRegular {
                        id: descriptionText
                        anchors.top: headerText.bottom
                        anchors.topMargin: 10
                        anchors.left: parent.left
                        anchors.right: parent.right
                        height: paintedHeight
                        text: "but we've given you this <b>temporary avatar</b> to use " +
                            "for today. If you see this avatar in-world, walk up and " +
                            "say hello to other new users!<br><br>" +
                            "<b>We want you to be you</b> so we've built an Avatar Creator " +
                            "App that's as easy as taking a selfie and picking your " +
                            "outfits! Available now on iOS and Android."
                        color: simplifiedUI.colors.text.black
                        size: 22
                        wrapMode: Text.Wrap
                    }

                    Item {
                        id: qrAndInstructionsContainer
                        anchors.top: descriptionText.bottom
                        anchors.topMargin: 50
                        anchors.left: parent.left
                        anchors.right: parent.right
                        height: avatarAppQRCodeImage.height

                        Image {
                            id: avatarAppQRCodeImage
                            source: resourceDirectoryUrl + "qml/hifi/simplifiedUI/avatarApp/images/qrCode.jpg"
                            height: 190
                            width: 190
                            mipmap: true
                            fillMode: Image.PreserveAspectFit
                        }

                        HifiStylesUit.RalewayBold {
                            id: instructionText
                            anchors.top: avatarAppQRCodeImage.top
                            anchors.bottom: avatarAppQRCodeImage.bottom
                            anchors.left: avatarAppQRCodeImage.right
                            anchors.leftMargin: 30
                            anchors.right: parent.right
                            text: "Use your mobile phone to scan this QR code."
                            color: simplifiedUI.colors.text.black
                            size: 22
                            wrapMode: Text.Wrap
                        }
                    }
                }
            }
        }
        

        HifiStylesUit.RalewayBold {
            id: continueLink
            anchors.bottom: parent.bottom
            anchors.left: parent.left
            anchors.leftMargin: 16
            anchors.right: parent.right
            anchors.rightMargin: 16
            height: 96
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            text: "Continue >"
            color: simplifiedUI.colors.text.lightBlue
            opacity: continueMouseArea.containsMouse ? 1.0 : 0.7
            size: 36

            MouseArea {
                id: continueMouseArea
                hoverEnabled: true
                anchors.fill: parent

                onClicked: {
                    Tablet.playSound(TabletEnums.ButtonClick);
                    tempAvatarPageContainer.visible = false;
                    Settings.setValue("simplifiedUI/closedAvatarPageOfInitialLaunchWindow", true);
                    controlsContainer.visible = true;
                }
            }
        }

        SimplifiedControls.VerticalScrollBar {
            parent: tempAvatarPageFlickable
        }
    }

    Item {
        id: controlsContainer
        visible: false
        anchors.fill: parent

        HifiStylesUit.RalewayRegular {
            id: controlsDescriptionText
            text: "Use these avatar controls to <b>interact with and move around in your new HQ.</b>"
            anchors.top: parent.top
            anchors.topMargin: 48
            anchors.left: parent.left
            anchors.leftMargin: 32
            anchors.right: parent.right
            anchors.rightMargin: 32
            horizontalAlignment: Text.AlignHCenter
            height: paintedHeight
            color: simplifiedUI.colors.text.black
            size: 36
            wrapMode: Text.Wrap
        }

        Item {
            anchors.top: controlsDescriptionText.bottom
            anchors.topMargin: 16
            anchors.left: parent.left
            anchors.right: parent.right
            anchors.bottom: bottomBarContainer.top

            GridView {
                id: controlsGrid
                property int maxColumns: 2
                property int idealCellWidth: 361
                anchors.fill: parent
                clip: true
                cellWidth: width / Math.min(Math.floor(width / idealCellWidth), maxColumns)
                cellHeight: 225
                model: ListModel {
                    ListElement {
                        imageHeight: 198
                        imageSource: "images/walkingControls.png"
                    }
                    ListElement {
                        imageHeight: 193
                        imageSource: "images/mouseControls.png"
                    }
                    ListElement {
                        imageHeight: 146
                        imageSource: "images/runJumpControls.png"
                    }
                    ListElement {
                        imageHeight: 96
                        imageSource: "images/cameraControls.png"
                    }
                }
                delegate: Rectangle {
                    height: GridView.view.cellHeight
                    width: GridView.view.cellWidth
                    Image {
                        anchors.centerIn: parent
                        width: parent.GridView.view.idealCellWidth
                        height: model.imageHeight
                        source: model.imageSource
                        fillMode: Image.PreserveAspectFit
                    }
                }
            }

            SimplifiedControls.VerticalScrollBar {
                parent: controlsGrid
                anchors.topMargin: 96
                anchors.bottomMargin: anchors.topMargin
            }
        }

        Item {
            id: bottomBarContainer
            anchors.left: parent.left
            anchors.leftMargin: 32
            anchors.right: parent.right
            anchors.rightMargin: 32
            anchors.bottom: parent.bottom
            height: iHaveAGoodGrip.height + learnMoreLink.height + 48

            HifiStylesUit.RalewayBold {
                id: iHaveAGoodGrip
                anchors.centerIn: parent
                text: "I've got a good grip on the controls."
                width: parent.width
                height: paintedHeight
                color: simplifiedUI.colors.text.lightBlue
                opacity: goodGripMouseArea.containsMouse ? 1.0 : 0.7
                size: 36
                wrapMode: Text.Wrap
                horizontalAlignment: Text.AlignHCenter

                MouseArea {
                    id: goodGripMouseArea
                    hoverEnabled: true
                    anchors.fill: parent

                    onClicked: {
                        Tablet.playSound(TabletEnums.ButtonClick);
                        sendToScript({
                            "source": "InitialLaunchWindow.qml",
                            "method": "closeInitialLaunchWindow"
                        });
                    }
                }
            }
        
            HifiStylesUit.RalewayBold {
                id: learnMoreLink
                anchors.left: parent.left
                anchors.leftMargin: 16
                anchors.top: iHaveAGoodGrip.bottom
                anchors.topMargin: 8
                text: "Learn more about our controls."
                width: paintedWidth
                height: paintedHeight
                color: simplifiedUI.colors.text.lightBlue
                opacity: learnMoreAboutControlsMouseArea.containsMouse ? 1.0 : 0.7
                size: 14
                wrapMode: Text.Wrap

                MouseArea {
                    id: learnMoreAboutControlsMouseArea
                    hoverEnabled: true
                    anchors.fill: parent

                    onClicked: {
                        Tablet.playSound(TabletEnums.ButtonClick);
                        Qt.openUrlExternally("https://www.highfidelity.com/knowledge/get-around");
                    }
                }
            }
        }
    }

    Image {
        id: topLeftAccentImage
        width: 400
        height: 180
        anchors.left: parent.left
        anchors.top: parent.top
        source: "images/defaultTopLeft.png"
    }

    Image {
        id: bottomRightAccentImage
        width: 80
        height: 250
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        source: "images/defaultBottomRight.png"
    }

    signal sendToScript(var message);
}