import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15

import Qt.labs.settings 1.0

import StatusQ 0.1
import StatusQ.Core 0.1
import StatusQ.Models 0.1

import AppLayouts.Wallet.panels 1.0
import AppLayouts.Wallet.stores 1.0

import utils 1.0

import Storybook 1.0
import Models 1.0

SplitView {
    id: root

    Logs { id: logs }

    orientation: Qt.Horizontal

    readonly property WalletAssetsStore walletAssetStore: WalletAssetsStore {
        assetsWithFilteredBalances: groupedAccountsAssetsModel
    }

    ManageCollectiblesModel {
        id: collectiblesModel
    }

    RolesRenamingModel {
        id: renamedModel
        sourceModel: collectiblesModel
        mapping: [
            RoleRename {
                from: "uid"
                to: "symbol"
            }
        ]
    }

    ManageTokensController {
        id: assetsController
        sourceModel: ctrlEmptyModel.checked ? null : walletAssetStore.groupedAccountAssetsModel
        settingsKey: "WalletAssets"
        serializeAsCollectibles: false

        onRequestSaveSettings: (jsonData) => {
            savingStarted()
            assetsSettingsStore.setValue(settingsKey, jsonData)
            savingFinished()
        }
        onRequestLoadSettings: {
            loadingStarted()
            const jsonData = assetsSettingsStore.value(settingsKey, null)
            loadingFinished(jsonData)
        }
        onRequestClearSettings: {
            assetsSettingsStore.setValue(settingsKey, null)
        }
    }

    Settings {
        id: assetsSettingsStore
        category: "ManageTokens-" + assetsController.settingsKey
    }

    ManageTokensController {
        id: collectiblesController
        sourceModel: ctrlEmptyModel.checked ? null : renamedModel
        settingsKey: "WalletCollectibles"
        serializeAsCollectibles: true

        onRequestSaveSettings: (jsonData) => {
            savingStarted()
            collectiblesSettingsStore.setValue(settingsKey, jsonData)
            savingFinished()
        }
        onRequestLoadSettings: {
            loadingStarted()
            const jsonData = collectiblesSettingsStore.value(settingsKey, null)
            loadingFinished(jsonData)
        }
        onRequestClearSettings: {
            collectiblesSettingsStore.setValue(settingsKey, null)
        }
    }

    Settings {
        id: collectiblesSettingsStore
        category: "ManageTokens-" + collectiblesController.settingsKey
    }

    ManageHiddenPanel {
        id: showcasePanel

        SplitView.fillWidth: true
        SplitView.fillHeight: true

        assetsController: assetsController
        collectiblesController: collectiblesController

        getCurrencyAmount: function (balance, symbol) {
            return ({
                        amount: balance,
                        symbol: symbol,
                        displayDecimals: 2,
                        stripTrailingZeroes: false
                    })
        }
        getCurrentCurrencyAmount: function (balance) {
            return ({
                        amount: balance,
                        symbol: "USD",
                        displayDecimals: 2,
                        stripTrailingZeroes: false
                    })
        }
    }

    LogsAndControlsPanel {
        id: logsAndControlsPanel

        SplitView.minimumWidth: 150
        SplitView.preferredWidth: 250

        logsView.logText: logs.logText

        ColumnLayout {
            Label {
                Layout.fillWidth: true
                text: "Has saved settings: %1".arg(showcasePanel.hasSettings ? "true" : "false")
            }

            Button {
                enabled: showcasePanel.hasSettings
                text: "Clear settings"
                onClicked: showcasePanel.clearSettings()
            }

            Switch {
                id: ctrlEmptyModel
                text: "Empty model"
            }

            Label {
                text: "Hidden community groups:"
            }
            Label {
                text: assetsController.hiddenCommunityGroups.concat(collectiblesController.hiddenCommunityGroups).join()
            }

            Label {
                text: "Hidden collection groups:"
            }
            Label {
                text: assetsController.hiddenCollectionGroups.concat(collectiblesController.hiddenCollectionGroups).join()
            }
        }
    }
}

// category: Panels

// https://www.figma.com/file/eM26pyHZUeAwMLviaS1KJn/%E2%9A%99%EF%B8%8F-Wallet-Settings%3A-Manage-Tokens?type=design&node-id=12-126364&mode=design&t=ZqKtOXpYtpReg4oL-0
// https://www.figma.com/file/eM26pyHZUeAwMLviaS1KJn/%E2%9A%99%EF%B8%8F-Wallet-Settings%3A-Manage-Tokens?type=design&node-id=40-127902&mode=design&t=ZqKtOXpYtpReg4oL-0
// https://www.figma.com/file/eM26pyHZUeAwMLviaS1KJn/%E2%9A%99%EF%B8%8F-Wallet-Settings%3A-Manage-Tokens?type=design&node-id=577-130046&mode=design&t=ZqKtOXpYtpReg4oL-0
// https://www.figma.com/file/eM26pyHZUeAwMLviaS1KJn/%E2%9A%99%EF%B8%8F-Wallet-Settings%3A-Manage-Tokens?type=design&node-id=577-151896&mode=design&t=ZqKtOXpYtpReg4oL-0