import QtQuick
import qs.Common
import qs.Services
import qs.Modules.ControlCenter.BuiltinPlugins
import "../utils/widgets.js" as WidgetUtils

QtObject {
    id: root

    property var vpnBuiltinInstance: null

    property var vpnLoader: Loader {
        active: false
        sourceComponent: Component {
            VpnWidget {}
        }

        onItemChanged: {
            root.vpnBuiltinInstance = item
        }

        Connections {
            target: SettingsData
            function onControlCenterWidgetsChanged() {
                const widgets = SettingsData.controlCenterWidgets || []
                const hasVpnWidget = widgets.some(w => w.id === "builtin_vpn")
                if (!hasVpnWidget && vpnLoader.active) {
                    console.log("VpnWidget: No VPN widget in control center, deactivating loader")
                    vpnLoader.active = false
                }
            }
        }
    }

    readonly property var coreWidgetDefinitions: [{
            "id": "nightMode",
            "text": "Night Mode",
            "description": "Blue light filter",
            "icon": "nightlight",
            "type": "toggle",
            "enabled": DisplayService.automationAvailable,
            "warning": !DisplayService.automationAvailable ? "Requires night mode support" : undefined
        }, {
            "id": "darkMode",
            "text": "Dark Mode",
            "description": "System theme toggle",
            "icon": "contrast",
            "type": "toggle",
            "enabled": true
        }, {
            "id": "doNotDisturb",
            "text": "Do Not Disturb",
            "description": "Block notifications",
            "icon": "do_not_disturb_on",
            "type": "toggle",
            "enabled": true
        }, {
            "id": "idleInhibitor",
            "text": "Keep Awake",
            "description": "Prevent screen timeout",
            "icon": "motion_sensor_active",
            "type": "toggle",
            "enabled": true
        }, {
            "id": "wifi",
            "text": "Network",
            "description": "Wi-Fi and Ethernet connection",
            "icon": "wifi",
            "type": "connection",
            "enabled": NetworkService.wifiAvailable,
            "warning": !NetworkService.wifiAvailable ? "Wi-Fi not available" : undefined
        }, {
            "id": "bluetooth",
            "text": "Bluetooth",
            "description": "Device connections",
            "icon": "bluetooth",
            "type": "connection",
            "enabled": BluetoothService.available,
            "warning": !BluetoothService.available ? "Bluetooth not available" : undefined
        }, {
            "id": "audioOutput",
            "text": "Audio Output",
            "description": "Speaker settings",
            "icon": "volume_up",
            "type": "connection",
            "enabled": true
        }, {
            "id": "audioInput",
            "text": "Audio Input",
            "description": "Microphone settings",
            "icon": "mic",
            "type": "connection",
            "enabled": true
        }, {
            "id": "volumeSlider",
            "text": "Volume Slider",
            "description": "Audio volume control",
            "icon": "volume_up",
            "type": "slider",
            "enabled": true
        }, {
            "id": "brightnessSlider",
            "text": "Brightness Slider",
            "description": "Display brightness control",
            "icon": "brightness_6",
            "type": "slider",
            "enabled": DisplayService.brightnessAvailable,
            "warning": !DisplayService.brightnessAvailable ? "Brightness control not available" : undefined,
            "allowMultiple": true
        }, {
            "id": "inputVolumeSlider",
            "text": "Input Volume Slider",
            "description": "Microphone volume control",
            "icon": "mic",
            "type": "slider",
            "enabled": true
        }, {
            "id": "battery",
            "text": "Battery",
            "description": "Battery and power management",
            "icon": "battery_std",
            "type": "action",
            "enabled": true
        }, {
            "id": "diskUsage",
            "text": "Disk Usage",
            "description": "Filesystem usage monitoring",
            "icon": "storage",
            "type": "action",
            "enabled": DgopService.dgopAvailable,
            "warning": !DgopService.dgopAvailable ? "Requires 'dgop' tool" : undefined,
            "allowMultiple": true
        }, {
            "id": "colorPicker",
            "text": "Color Picker",
            "description": "Choose colors from palette",
            "icon": "palette",
            "type": "action",
            "enabled": true
        }, {
            "id": "builtin_vpn",
            "text": "VPN",
            "description": "VPN connections",
            "icon": "vpn_key",
            "type": "builtin_plugin",
            "enabled": VpnService.available,
            "warning": !VpnService.available ? "VPN not available" : undefined,
            "isBuiltinPlugin": true
        }]

    function getPluginWidgets() {
        const plugins = []
        const loadedPlugins = PluginService.getLoadedPlugins()

        for (var i = 0; i < loadedPlugins.length; i++) {
            const plugin = loadedPlugins[i]

            if (plugin.type === "daemon") {
                continue
            }

            const pluginComponent = PluginService.pluginWidgetComponents[plugin.id]
            if (!pluginComponent) {
                continue
            }

            const tempInstance = pluginComponent.createObject(null)
            if (!tempInstance) {
                continue
            }

            const hasCCWidget = tempInstance.ccWidgetIcon && tempInstance.ccWidgetIcon.length > 0
            tempInstance.destroy()

            if (!hasCCWidget) {
                continue
            }

            plugins.push({
                             "id": "plugin_" + plugin.id,
                             "pluginId": plugin.id,
                             "text": plugin.name || "Plugin",
                             "description": plugin.description || "",
                             "icon": plugin.icon || "extension",
                             "type": "plugin",
                             "enabled": true,
                             "isPlugin": true
                         })
        }

        return plugins
    }

    readonly property var baseWidgetDefinitions: coreWidgetDefinitions

    function getWidgetForId(widgetId) {
        return WidgetUtils.getWidgetForId(baseWidgetDefinitions, widgetId)
    }

    function addWidget(widgetId) {
        WidgetUtils.addWidget(widgetId)
    }

    function removeWidget(index) {
        WidgetUtils.removeWidget(index)
    }

    function toggleWidgetSize(index) {
        WidgetUtils.toggleWidgetSize(index)
    }

    function moveWidget(fromIndex, toIndex) {
        WidgetUtils.moveWidget(fromIndex, toIndex)
    }

    function resetToDefault() {
        WidgetUtils.resetToDefault()
    }

    function clearAll() {
        WidgetUtils.clearAll()
    }
}
