// Desktop & Dock.
//
// The dock timings used to be shown here as text -- "Instant", "250 ms" -- even
// though they were already stored, mutable integers. They are controls now.
// The window-layout card keeps text rows because those really are facts about
// how Panama tiles rather than settings: the adjustable parts of window
// appearance live on the Appearance page, next to the preview that explains
// them.

import QtQuick
import qs.config
import qs.services

SettingsPage {
    id: root

    title: "Desktop & Dock"
    lede: "Keep the shell instant, spatial, and out of your way."

    SettingsCard {
        title: "Dock"

        ToggleRow { setting: "dockAutohide" }
        SliderRow { setting: "dockRevealDelayMs"; zeroLabel: "Instant" }
        SliderRow { setting: "dockHideDelayMs"; zeroLabel: "Instant"; divider: false }
    }

    SettingsCard {
        title: "Pinned applications"
        subtitle: "What sits in the Dock whether or not it is running. Order here is the order on screen."

        DockPinsEditor {
            id: pins
            width: parent.width
        }
    }

    SettingsCard {
        title: "Pin another application"

        DockAppPicker {
            width: parent.width
            pinned: pins.pinned
            onPicked: id => pins.add(id)
        }
    }

    SettingsCard {
        title: "Window layout"
        subtitle: "Panama follows the Forge mental model with native Hyprland tiling."

        TextRow {
            label: "Layout"
            detail: "Dwindle with preserved split direction"
            value: "Tiling"
        }
        TextRow {
            label: "Workspace movement"
            detail: "Alt+H / Alt+L, add Shift to move a window"
            value: "Dynamic"
        }
        ActionRow {
            label: "Gaps, corners, and effects"
            detail: "Adjusted on the Appearance page, beside a live preview"
            action: "Open Appearance"
            divider: false
            onTriggered: ShellState.openSettings("appearance")
        }
    }

    SettingsCard {
        title: "Focus"

        SliderRow { setting: "focusDurationMinutes"; divider: false }
    }

    SettingsCard {
        title: "Snapshots"
        subtitle: SettingsBackup.lastError !== ""
            ? SettingsBackup.lastError
            : "Your whole desktop configuration is one file, so a snapshot is a copy of it. Restoring also snapshots what it replaces, so it is itself undoable."

        ActionRow {
            label: "Back up current settings"
            detail: SettingsBackup.snapshots.length === 0
                ? "No snapshots yet"
                : SettingsBackup.snapshots.length + (SettingsBackup.snapshots.length === 1 ? " snapshot kept" : " snapshots kept") + ", newest first"
            action: "Back up now"
            enabled: !SettingsBackup.busy
            divider: SettingsBackup.snapshots.length > 0
            onTriggered: SettingsBackup.save()
        }

        Repeater {
            id: snapshotRows
            model: SettingsBackup.snapshots

            ActionRow {
                required property var modelData
                required property int index

                label: modelData.when
                detail: modelData.keys + " settings"
                action: "Restore"
                enabled: !SettingsBackup.busy
                divider: index < snapshotRows.count - 1
                onTriggered: SettingsBackup.restore(modelData.name)
            }
        }
    }

    SettingsCard {
        title: "Reset"
        subtitle: "Restores Panama's appearance, dock, clock, focus, and display policy, and clears your Home accessory arrangement. Pinned applications, files, and paired devices are not changed."

        ActionRow {
            label: "Restore Panama defaults"
            detail: "Applies immediately, including to the compositor"
            action: "Restore defaults"
            divider: false
            onTriggered: SystemSettings.restoreDefaults()
        }
    }
}
