import QtQuick 2.12
import QtQml.Models 2.14

import StatusQ.Core.Theme 0.1
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Core.Utils 0.1

import utils 1.0
import "../stores"

StatusSelect {
    id: selectAccountType

    property int addAccountType
    property string derivedFromAddress: ""
    property string selectedKeyUid: userProfile.keyUid
    property bool selectedKeyUidMigratedToKeycard: userProfile.isKeycardUser


    enum AddAccountType {
        GenerateNew,
        ImportSeedPhrase,
        ImportPrivateKey,
        WatchOnly
    }

    function resetMe() {
        _internal.getGeneratedAccountsModel()
        selectAccountType.addAccountType = SelectGeneratedAccount.AddAccountType.GenerateNew
        selectAccountType.selectedKeyUid = userProfile.keyUid
        selectAccountType.selectedKeyUidMigratedToKeycard = userProfile.isKeycardUser
    }

    Connections {
        target: RootStore.generatedAccountsViewModel
        onModelReset: {
            _internal.delegateModel.model = RootStore.generatedAccountsViewModel
            _internal.getGeneratedAccountsModel()
        }
    }

    QtObject {
        id: _internal
        property string importSeedPhraseString : qsTr("Import new Seed Phrase")
        property string importPrivateKeyString : qsTr("Generate from Private key")
        property string addWatchOnlyAccountString : qsTr("Add a watch-only address")

        property var delegateModel: DelegateModel {
            model: RootStore.generatedAccountsViewModel
            onModelUpdated: {
                _internal.getGeneratedAccountsModel()
            }
        }
        property ListModel generatedAccountsModel: ListModel{}

        function getGeneratedAccountsModel() {
            if(generatedAccountsModel) {
                generatedAccountsModel.clear()
                for (var row = 0; row < _internal.delegateModel.model.count; row++) {
                    if (_internal.delegateModel.items.count > 0) {
                        var item = _internal.delegateModel.items.get(row).model;
                        generatedAccountsModel.append({"name": item.name, "iconName": item.iconName, "generatedModel": item.generatedModel, "derivedfrom": item.derivedfrom, "isHeader": false,
                                                                              "keyUid": item.keyUid, "migratedToKeycard": item.migratedToKeycard})
                        if (row === 0 && _internal.delegateModel.model.count > 1) {
                            generatedAccountsModel.append({"name": qsTr("Imported"), "iconName": "", "derivedfrom": "", "isHeader": true, "keyUid": "", "migratedToKeycard": false})
                        }
                    }
                }
                generatedAccountsModel.append({"name": qsTr("Add new"), "iconName": "", "derivedfrom": "", "isHeader": true, "keyUid": "", "migratedToKeycard": false})
                generatedAccountsModel.append({"name": _internal.importSeedPhraseString, "iconName": "seed-phrase", "derivedfrom": "", "isHeader": false, "keyUid": "", "migratedToKeycard": false})
                generatedAccountsModel.append({"name": _internal.importPrivateKeyString, "iconName": "password", "derivedfrom": "", "isHeader": false, "keyUid": "", "migratedToKeycard": false})
                generatedAccountsModel.append({"name": _internal.addWatchOnlyAccountString, "iconName": "show", "derivedfrom": "", "isHeader": false, "keyUid": "", "migratedToKeycard": false})
            }
        }
    }

    label: qsTr("Origin")
    model: _internal.generatedAccountsModel
    selectedItemComponent: StatusListItem {
        id: selectedItem
        asset.bgColor: "transparent"
        border.width: 1
        border.color: Theme.palette.baseColor2
        tagsDelegate: StatusListItemTag {
            bgColor: model.color
            bgRadius: 6
            height: Style.current.bigPadding
            closeButtonVisible: false
            asset.emoji: model.emoji
            asset.emojiSize: Emoji.size.verySmall
            asset.isLetterIdenticon: true
            title: model.name
            titleText.font.pixelSize: 12
            titleText.color: Theme.palette.indirectColor1
        }
    }
    menuDelegate: StatusListItem {
        id: defaultListItem
        title: model.name
        asset.name: model.iconName
        tagsModel : model.generatedModel
        enabled: !model.isHeader
        asset.bgColor: "transparent"
        asset.color: model.generatedModel ? Theme.palette.primaryColor1 : Theme.palette.directColor5
        tagsDelegate: StatusListItemTag {
            bgColor: model.color
            bgRadius: 6
            height: 24
            closeButtonVisible: false
            asset.emoji: model.emoji
            asset.emojiSize: Emoji.size.verySmall
            asset.isLetterIdenticon: true
            title: model.name
            titleText.font.pixelSize: 12
            titleText.color: Theme.palette.indirectColor1
        }
        onClicked: {
            selectAccountType.addAccountType = (model.name === _internal.importSeedPhraseString) ? SelectGeneratedAccount.AddAccountType.ImportSeedPhrase :
                                             (model.name === _internal.importPrivateKeyString) ? SelectGeneratedAccount.AddAccountType.ImportPrivateKey :
                                             (model.name === _internal.addWatchOnlyAccountString) ? SelectGeneratedAccount.AddAccountType.WatchOnly :
                                             SelectGeneratedAccount.AddAccountType.GenerateNew
            selectedItem.title = model.name
            selectedItem.asset.name = model.iconName
            selectedItem.tagsModel = model.generatedModel
            selectedItem.enabled =  !model.isHeader

            selectAccountType.derivedFromAddress = model.derivedfrom
            selectAccountType.selectedKeyUid = model.keyUid
            selectAccountType.selectedKeyUidMigratedToKeycard = model.migratedToKeycard

            selectMenu.close()
        }
        Component.onCompleted: {
            if(index === 0) {
                selectedItem.title = model.name
                selectedItem.asset.name = model.iconName
                selectedItem.tagsModel = model.generatedModel
                selectedItem.enabled =  !model.isHeader
                selectAccountType.derivedFromAddress = model.derivedfrom
            }
        }
    }
}