import QtQuick 2.15
import utils 1.0

QtObject {
    id: root

    property var advancedModule
    property var walletModule
    property var networksModuleInst: networksModule

    // Advanced Module Properties
    property string fleet: advancedModule? advancedModule.fleet : ""
    property bool wakuV2LightClientEnabled: advancedModule? advancedModule.wakuV2LightClientEnabled : false
    property bool isTelemetryEnabled: advancedModule? advancedModule.isTelemetryEnabled : false
    property bool isAutoMessageEnabled: advancedModule? advancedModule.isAutoMessageEnabled : false
    property bool isNimbusProxyEnabled: advancedModule? advancedModule.isNimbusProxyEnabled : false
    property bool isDebugEnabled: advancedModule? advancedModule.isDebugEnabled : false
    readonly property bool isWakuV2ShardedCommunitiesEnabled: localAppSettings.wakuV2ShardedCommunitiesEnabled ?? false
    property int logMaxBackups: advancedModule ? advancedModule.logMaxBackups : 1
    property bool isRuntimeLogLevelSet: advancedModule ? advancedModule.isRuntimeLogLevelSet: false
    readonly property bool archiveProtocolEnabled: advancedModule ? advancedModule.archiveProtocolEnabled : false

    property var customNetworksModel: advancedModule? advancedModule.customNetworksModel : []

    readonly property bool isFakeLoadingScreenEnabled: localAppSettings.fakeLoadingScreenEnabled ?? false
    readonly property bool createCommunityEnabled: localAppSettings.createCommunityEnabled ?? false
    property bool isManageCommunityOnTestModeEnabled: false
    readonly property QtObject experimentalFeatures: QtObject {
        readonly property string browser: "browser"
        readonly property string communities: "communities"
        readonly property string activityCenter: "activityCenter"
        readonly property string nodeManagement: "nodeManagement"
        readonly property string onlineUsers: "onlineUsers"
        readonly property string communitiesPortal: "communitiesPortal"
        readonly property string communityPermissions: "communityPermissions"
        readonly property string discordImportTool: "discordImportTool"
        readonly property string communityTokens: "communityTokens"
    }

    readonly property bool isCustomScrollingEnabled: localAppSettings.isCustomMouseScrollingEnabled ?? false
    readonly property real scrollVelocity: localAppSettings.scrollVelocity
    readonly property real scrollDeceleration: localAppSettings.scrollDeceleration

    readonly property bool refreshTokenEnabled: localAppSettings.refreshTokenEnabled ?? false

    readonly property bool isGoerliEnabled: networksModuleInst.isGoerliEnabled

    function logDir() {
        if(!root.advancedModule)
            return ""

        return root.advancedModule.logDir()
    }

    function setNetworkName(networkName) {
        if(!root.advancedModule)
            return

        root.advancedModule.setNetworkName(networkName)
    }

    function setFleet(fleetName) {
        if(!root.advancedModule)
            return

        root.advancedModule.setFleet(fleetName)
    }

    function setWakuV2LightClientEnabled(mode) {
        if(!root.advancedModule)
            return

        root.advancedModule.setWakuV2LightClientEnabled(mode)
    }

    function toggleTelemetry() {
        if(!root.advancedModule)
            return

        root.advancedModule.toggleTelemetry()
    }

    function toggleAutoMessage() {
        if(!root.advancedModule)
            return

        root.advancedModule.toggleAutoMessage()
    }

    function toggleDebug() {
        if(!root.advancedModule)
            return

        root.advancedModule.toggleDebug()
    }

    function toggleNimbusProxy() {
        if(!root.advancedModule)
            return

        root.advancedModule.toggleNimbusProxy()
    }

    function setMaxLogBackups(value) {
        if(!root.advancedModule)
            return

        root.advancedModule.setMaxLogBackups(value)
    }

    function enableDeveloperFeatures() {
        if(!root.advancedModule)
            return

        root.advancedModule.enableDeveloperFeatures()
    }

    function toggleExperimentalFeature(feature) {
        if(!root.advancedModule)
            return

        if (feature === experimentalFeatures.browser) {
            advancedModule.toggleBrowserSection()
        }
        else if (feature === experimentalFeatures.communities) {
            advancedModule.toggleCommunitySection()
        }
        else if (feature === experimentalFeatures.communitiesPortal) {
            advancedModule.toggleCommunitiesPortalSection()
        }
        else if (feature === experimentalFeatures.activityCenter) {
            localAccountSensitiveSettings.isActivityCenterEnabled = !localAccountSensitiveSettings.isActivityCenterEnabled
        }
        else if (feature === experimentalFeatures.nodeManagement) {
            advancedModule.toggleNodeManagementSection()
        }
        else if (feature === experimentalFeatures.onlineUsers) {
            localAccountSensitiveSettings.showOnlineUsers = !localAccountSensitiveSettings.showOnlineUsers
        }
    }

    function toggleFakeLoadingScreen() {
        if(!localAppSettings)
            return

        localAppSettings.fakeLoadingScreenEnabled = !localAppSettings.fakeLoadingScreenEnabled
    }

    function toggleCreateCommunityEnabled() {
        if(!localAppSettings)
            return

        localAppSettings.createCommunityEnabled = !localAppSettings.createCommunityEnabled
    }

    function toggleArchiveProtocolEnabled() {
        if(!advancedModule)
            return

        if (root.archiveProtocolEnabled) {
            advancedModule.disableCommunityHistoryArchiveSupport()
        } else {
            advancedModule.enableCommunityHistoryArchiveSupport()
        }
    }

    function toggleManageCommunityOnTestnet() {
        root.isManageCommunityOnTestModeEnabled = !root.isManageCommunityOnTestModeEnabled
    }

    function toggleWakuV2ShardedCommunities() {
        if(!localAppSettings)
            return

        localAppSettings.wakuV2ShardedCommunitiesEnabled = !localAppSettings.wakuV2ShardedCommunitiesEnabled
    }

    function toggleRefreshTokenEnabled() {
        if(!localAppSettings)
            return
        localAppSettings.refreshTokenEnabled = !localAppSettings.refreshTokenEnabled
    }

    function setCustomScrollingEnabled(value) {
        if(!localAppSettings)
            return

        localAppSettings.isCustomMouseScrollingEnabled = value
    }

    function setScrollVelocity(value) {
        if(!localAppSettings)
            return

        localAppSettings.scrollVelocity = value
    }

    function setScrollDeceleration(value) {
        if(!localAppSettings)
            return

        localAppSettings.scrollDeceleration = value
    }

    function toggleIsGoerliEnabled(){
        networksModule.toggleIsGoerliEnabled()
    }

}