import QtQuick
import qs.Common
import qs.Modules.ControlCenter.Details

Item {
    id: root

    property string expandedSection: ""
    property var expandedWidgetData: null

    height: active ? 250 : 0
    visible: active

    readonly property bool active: expandedSection !== ""

    Loader {
        anchors.fill: parent
        anchors.topMargin: Theme.spacingS
        sourceComponent: {
            if (!root.active)
                return null;

            if (expandedSection.startsWith("diskUsage_")) {
                return diskUsageDetailComponent;
            }

            switch (expandedSection) {
            case "wifi":
                return networkDetailComponent;
            case "bluetooth":
                return bluetoothDetailComponent;
            case "audioOutput":
                return audioOutputDetailComponent;
            case "audioInput":
                return audioInputDetailComponent;
            case "battery":
                return batteryDetailComponent;
            default:
                return null;
            }
        }
    }

    Component {
        id: networkDetailComponent
        NetworkDetail {}
    }

    Component {
        id: bluetoothDetailComponent
        BluetoothDetail {}
    }

    Component {
        id: audioOutputDetailComponent
        AudioOutputDetail {}
    }

    Component {
        id: audioInputDetailComponent
        AudioInputDetail {}
    }

    Component {
        id: batteryDetailComponent
        BatteryDetail {}
    }

    Component {
        id: diskUsageDetailComponent
        DiskUsageDetail {
            currentMountPath: root.expandedWidgetData?.mountPath || "/"
            instanceId: root.expandedWidgetData?.instanceId || ""

            onMountPathChanged: newMountPath => {
                if (root.expandedWidgetData && root.expandedWidgetData.id === "diskUsage") {
                    const widgets = SettingsData.controlCenterWidgets || [];
                    const newWidgets = widgets.map(w => {
                        if (w.id === "diskUsage" && w.instanceId === root.expandedWidgetData.instanceId) {
                            const updatedWidget = Object.assign({}, w);
                            updatedWidget.mountPath = newMountPath;
                            return updatedWidget;
                        }
                        return w;
                    });
                    SettingsData.set("controlCenterWidgets", newWidgets);
                }
            }
        }
    }
}
