// Workspaces.
//
// Where windows go, how long a focus session runs, and the layouts you saved.
// Projects are saved from the launcher rather than created here: a layout is
// worth recording at the moment you have it right, not from a settings page
// where you would have to describe it.

import QtQuick
import qs.config
import qs.services

SettingsPage {
    id: root

    // Which project is one click from being forgotten. Same in-place confirm the
    // SSH Keys and Snapshots pages use.
    property string confirmingProject: ""

    title: "Workspaces"
    lede: "Workspaces, focus, and the projects that restore them."

    SettingsCard {
        title: "Workspaces & focus"
        subtitle: "Hyprland's workspaces are created and destroyed as you use them, so there is no fixed count to set."

        ToggleRow { setting: "workspaceBackAndForth" }
        ToggleRow { setting: "allowWorkspaceCycles" }
        ToggleRow { setting: "focusOnActivate" }
        ToggleRow { setting: "mouseMoveFocusesMonitor" }
        ToggleRow { setting: "windowSwallow"; divider: false }
    }

    SettingsCard {
        title: "Focus"

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

    // Saved here, not created here. A layout is worth recording at the moment
    // you have it right, so saving is a launcher command; this is where the
    // ones you kept are reviewed and the ones you did not are removed.
    SettingsCard {
        title: "Projects"
        subtitle: Projects.projects.length > 0
            ? "Saved window layouts. Opening one claims free workspaces, so it never lands on top of what you are doing."
            : "No saved layouts yet. Arrange your windows, then run \"Save Layout as Project\" from the launcher."

        Repeater {
            model: Projects.projects

            delegate: SettingRow {
                id: projectRow

                required property var modelData
                required property int index

                readonly property string projectName: String(projectRow.modelData.name ?? "")
                readonly property bool confirming: root.confirmingProject === projectRow.projectName

                label: projectRow.projectName
                detail: projectRow.confirming
                    ? "Forgetting this only removes the layout. Nothing that is open closes."
                    : projectRow.modelData.windows + " windows across "
                      + projectRow.modelData.workspaces + " workspaces — "
                      + (projectRow.modelData.applications ?? []).join(", ")
                divider: projectRow.index < Projects.projects.length - 1
                controlWidth: 210

                Row {
                    anchors.right: parent.right
                    anchors.verticalCenter: parent.verticalCenter
                    spacing: 8

                    SettingsButton {
                        anchors.verticalCenter: parent.verticalCenter
                        visible: !projectRow.confirming
                        text: "Open"
                        enabled: !Projects.busy
                        onClicked: Projects.open(projectRow.projectName)
                    }

                    SettingsButton {
                        anchors.verticalCenter: parent.verticalCenter
                        visible: projectRow.confirming
                        text: "Forget it"
                        tone: "danger"
                        enabled: !Projects.busy
                        onClicked: {
                            root.confirmingProject = "";
                            Projects.remove(projectRow.projectName);
                        }
                    }

                    SettingsButton {
                        anchors.verticalCenter: parent.verticalCenter
                        text: projectRow.confirming ? "Keep" : "Forget"
                        enabled: !Projects.busy
                        onClicked: root.confirmingProject =
                            projectRow.confirming ? "" : projectRow.projectName
                    }
                }
            }
        }

        TextRow {
            visible: Projects.lastError !== ""
            label: "Problem"
            detail: Projects.lastError
            divider: false
        }
    }
}
