// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
// SPDX-FileCopyrightText: 2023 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick 2.10
import QtQuick.Controls 2.3
import QtQuick.Window 2.13
import im.nheko 1.0

ApplicationWindow {
    id: dialog

    property var flow

    onClosing: VerificationManager.removeVerificationFlow(flow)
    title: stack.currentItem ? (stack.currentItem.title_ || "") : ""
    modality: Qt.NonModal
    palette: Nheko.colors
    color: Nheko.colors.window
    //height: stack.currentItem.implicitHeight
    minimumHeight: stack.currentItem.implicitHeight + 2 * Nheko.paddingLarge
    height: stack.currentItem.implicitHeight + 2 * Nheko.paddingMedium
    minimumWidth: 400
    flags: Qt.Dialog | Qt.WindowCloseButtonHint | Qt.WindowTitleHint

    background: Rectangle {
        color: Nheko.colors.window
    }


    StackView {
        id: stack

        anchors.centerIn: parent

        initialItem: newVerificationRequest
        implicitWidth: dialog.width - 2* Nheko.paddingMedium
        implicitHeight: dialog.height - 2* Nheko.paddingMedium
    }

    Component {
        id: newVerificationRequest

        NewVerificationRequest {
        }

    }

    Component {
        id: waiting

        Waiting {
        }

    }

    Component {
        id: success

        Success {
        }

    }

    Component {
        id: failed

        Failed {
        }

    }

    Component {
        id: digitVerification

        DigitVerification {
        }

    }

    Component {
        id: emojiVerification

        EmojiVerification {
        }

    }

    Item {
        state: flow.state
        states: [
            State {
                name: "PromptStartVerification"

                StateChangeScript {
                    script: stack.replace(null, newVerificationRequest)
                }

            },
            State {
                name: "CompareEmoji"

                StateChangeScript {
                    script: stack.replace(null, emojiVerification)
                }

            },
            State {
                name: "CompareNumber"

                StateChangeScript {
                    script: stack.replace(null, digitVerification)
                }

            },
            State {
                name: "WaitingForKeys"

                StateChangeScript {
                    script: stack.replace(null, waiting)
                }

            },
            State {
                name: "WaitingForOtherToAccept"

                StateChangeScript {
                    script: stack.replace(null, waiting)
                }

            },
            State {
                name: "WaitingForMac"

                StateChangeScript {
                    script: stack.replace(null, waiting)
                }

            },
            State {
                name: "Success"

                StateChangeScript {
                    script: stack.replace(null, success)
                }

            },
            State {
                name: "Failed"

                StateChangeScript {
                    script: stack.replace(null, failed)
                }

            }
        ]
    }

}