import QtQuick 2.6
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.14
import QtQuick.Controls.Material 2.0

import org.electrum 1.0

import "controls"

ElDialog {
    id: dialog
    title: qsTr('Payment Request')

    property string key

    property string _bolt11
    property string _bip21uri
    property string _address

    property bool _render_qr: false // delay qr rendering until dialog is shown

    parent: Overlay.overlay
    modal: true
    standardButtons: Dialog.Close

    width: parent.width
    height: parent.height

    Overlay.modal: Rectangle {
        color: "#aa000000"
    }

    Flickable {
        anchors.fill: parent
        contentHeight: rootLayout.height
        clip:true
        interactive: height < contentHeight

        ColumnLayout {
            id: rootLayout
            width: parent.width
            spacing: constants.paddingMedium

            states: [
                State {
                    name: 'bolt11'
                    PropertyChanges { target: qrloader; sourceComponent: qri_bolt11 }
                    PropertyChanges { target: bolt11label; font.bold: true }
                },
                State {
                    name: 'bip21uri'
                    PropertyChanges { target: qrloader; sourceComponent: qri_bip21uri }
                    PropertyChanges { target: bip21label; font.bold: true }
                },
                State {
                    name: 'address'
                    PropertyChanges { target: qrloader; sourceComponent: qri_address }
                    PropertyChanges { target: addresslabel; font.bold: true }
                }
            ]

            Rectangle {
                height: 1
                Layout.fillWidth: true
                color: Material.accentColor
            }

            Item {
                Layout.alignment: Qt.AlignHCenter
                Layout.topMargin: constants.paddingSmall
                Layout.bottomMargin: constants.paddingSmall

                Layout.preferredWidth: qrloader.width
                Layout.preferredHeight: qrloader.height

                Loader {
                    id: qrloader
                    Component {
                        id: qri_bolt11
                        QRImage {
                            qrdata: _bolt11
                            render: _render_qr
                        }
                    }
                    Component {
                        id: qri_bip21uri
                        QRImage {
                            qrdata: _bip21uri
                            render: _render_qr
                        }
                    }
                    Component {
                        id: qri_address
                        QRImage {
                            qrdata: _address
                            render: _render_qr
                        }
                    }
                }

                MouseArea {
                    anchors.fill: parent
                    onClicked: {
                        if (rootLayout.state == 'bolt11') {
                            if (_bip21uri != '')
                                rootLayout.state = 'bip21uri'
                            else if (_address != '')
                                rootLayout.state = 'address'
                        } else if (rootLayout.state == 'bip21uri') {
                            if (_address != '')
                                rootLayout.state = 'address'
                            else if (_bolt11 != '')
                                rootLayout.state = 'bolt11'
                        } else if (rootLayout.state == 'address') {
                            if (_bolt11 != '')
                                rootLayout.state = 'bolt11'
                            else if (_bip21uri != '')
                                rootLayout.state = 'bip21uri'
                        }
                    }
                }
            }

            RowLayout {
                Layout.alignment: Qt.AlignHCenter
                spacing: constants.paddingLarge
                Label {
                    id: bolt11label
                    text: qsTr('BOLT11')
                    color: _bolt11 ? Material.foreground : constants.mutedForeground
                }
                Rectangle {
                    Layout.preferredWidth: constants.paddingXXSmall
                    Layout.preferredHeight: constants.paddingXXSmall
                    radius: constants.paddingXXSmall / 2
                    color: Material.accentColor
                }
                Label {
                    id: bip21label
                    text: qsTr('BIP21')
                    color: _bip21uri ? Material.foreground : constants.mutedForeground
                }
                Rectangle {
                    Layout.preferredWidth: constants.paddingXXSmall
                    Layout.preferredHeight: constants.paddingXXSmall
                    radius: constants.paddingXXSmall / 2
                    color: Material.accentColor
                }
                Label {
                    id: addresslabel
                    text: qsTr('ADDRESS')
                    color: _address ? Material.foreground : constants.mutedForeground
                }
            }

            Rectangle {
                height: 1
                Layout.fillWidth: true
                color: Material.accentColor
            }

            RowLayout {
                Layout.alignment: Qt.AlignHCenter
                Button {
                    icon.source: '../../icons/delete.png'
                    text: qsTr('Delete')
                    onClicked: {
                        Daemon.currentWallet.delete_request(request.key)
                        dialog.close()
                    }
                }
                Button {
                    icon.source: '../../icons/copy_bw.png'
                    icon.color: 'transparent'
                    text: 'Copy'
                    onClicked: {
                        if (request.isLightning && rootLayout.state == 'bolt11')
                            AppController.textToClipboard(_bolt11)
                        else if (rootLayout.state == 'bip21uri')
                            AppController.textToClipboard(_bip21uri)
                        else
                            AppController.textToClipboard(_address)
                    }
                }
                Button {
                    icon.source: '../../icons/share.png'
                    text: 'Share'
                    onClicked: {
                        enabled = false
                        if (request.isLightning && rootLayout.state == 'bolt11')
                            AppController.doShare(_bolt11, qsTr('Payment Request'))
                        else if (rootLayout.state == 'bip21uri')
                            AppController.doShare(_bip21uri, qsTr('Payment Request'))
                        else
                            AppController.doShare(_address, qsTr('Onchain address'))

                        enabled = true
                    }
                }
            }

            GridLayout {
                columns: 2

                Label {
                    visible: request.message != ''
                    text: qsTr('Description')
                }
                Label {
                    visible: request.message != ''
                    Layout.fillWidth: true
                    wrapMode: Text.Wrap
                    text: request.message
                    font.pixelSize: constants.fontSizeLarge
                }

                Label {
                    visible: request.amount.satsInt != 0
                    text: qsTr('Amount')
                }
                RowLayout {
                    visible: request.amount.satsInt != 0
                    Label {
                        text: Config.formatSats(request.amount)
                        font.family: FixedFont
                        font.pixelSize: constants.fontSizeLarge
                        font.bold: true
                    }
                    Label {
                        text: Config.baseUnit
                        color: Material.accentColor
                        font.pixelSize: constants.fontSizeLarge
                    }

                    Label {
                        id: fiatValue
                        Layout.fillWidth: true
                        text: Daemon.fx.enabled
                                ? '(' + Daemon.fx.fiatValue(request.amount, false) + ' ' + Daemon.fx.fiatCurrency + ')'
                                : ''
                        font.pixelSize: constants.fontSizeMedium
                        wrapMode: Text.Wrap
                    }
                }

                Label {
                    visible: request.address
                    text: qsTr('Address')
                }

                Label {
                    visible: request.address
                    Layout.fillWidth: true
                    font.family: FixedFont
                    font.pixelSize: constants.fontSizeLarge
                    wrapMode: Text.WrapAnywhere
                    text: request.address
                }

                Label {
                    text: qsTr('Status')
                }
                Label {
                    Layout.fillWidth: true
                    font.pixelSize: constants.fontSizeLarge
                    text: request.status_str
                }
            }
        }
    }

    Component.onCompleted: {
        if (!request.isLightning) {
            _bip21uri = request.bip21
            _address = request.address
            rootLayout.state = 'bip21uri'
        } else {
            _bolt11 = request.bolt11
            rootLayout.state = 'bolt11'
            if (request.address != '') {
                _bip21uri = request.bip21
                _address = request.address
            }
        }
    }

    RequestDetails {
        id: request
        wallet: Daemon.currentWallet
        key: dialog.key
    }

    // hack. delay qr rendering until dialog is shown
    Connections {
        target: dialog.enter
        function onRunningChanged() {
            if (!dialog.enter.running) {
                dialog._render_qr = true
            }
        }
    }
}
