import QtQuick 2.14

import StatusQ.Core 0.1
import StatusQ.Controls 0.1

import utils 1.0

import shared.stores 1.0

Loader {
    id: root
    active: false

    property NetworkConnectionStore networkConnectionStore
    readonly property string jointChainIdString: networkConnectionStore.getChainIdsJointString(chainIdsDown)
    property string websiteDown
    property int connectionState: -1
    property var chainIdsDown: []
    property bool completelyDown: false
    property double lastCheckedAtUnix: -1
    property string lastCheckedAt
    property bool withCache: false
    property string tooltipMessage
    property string toastText

    function updateBanner() {
        root.active = true
        if (connectionState === Constants.ConnectionStatus.Failure)
            item.show()
        else
            item.showFor(3000)
    }

    sourceComponent: ModuleWarning {
        QtObject {
            id: d
            readonly property bool isOnline: networkConnectionStore.isOnline
            onIsOnlineChanged: if(!isOnline) hide()
        }

        onHideFinished: root.active = false

        text: root.toastText
        type: connectionState === Constants.ConnectionStatus.Success ? ModuleWarning.Success : ModuleWarning.Danger
        buttonText: connectionState === Constants.ConnectionStatus.Failure ? qsTr("Retry now") : ""

        onClicked: networkConnectionStore.retryConnection(websiteDown)
        onCloseClicked: hide()

        onLinkActivated: {
            toolTip.show(root.tooltipMessage, 3000)
        }

        StatusToolTip {
            id: toolTip
            orientation: StatusToolTip.Orientation.Bottom
            maxWidth: 300
        }
    }

    Connections {
        target: networkConnectionStore.networkConnectionModuleInst
        function onNetworkConnectionStatusUpdate(website: string, completelyDown: bool, connectionState: int, chainIds: string, lastCheckedAtUnix: double)  {
            if (website === websiteDown) {
                root.connectionState = connectionState
                root.chainIdsDown = chainIds.split(";")
                root.completelyDown = completelyDown
                root.lastCheckedAtUnix = lastCheckedAtUnix
                root.lastCheckedAt = LocaleUtils.formatDateTime(new Date(lastCheckedAtUnix*1000))
                root.updateBanner()
            }
        }
    }
}