import QtQuick
import qs.config
import qs.services

SettingsPage {
    title: "Notifications & Focus"
    lede: "Control interruptions without losing useful history."

    SettingsCard {
        title: "Notifications"

        SettingRow {
            label: "Do Not Disturb"
            detail: "Keep notifications in the center but suppress banners"
            controlWidth: 48

            SettingsToggle {
                anchors.right: parent.right
                anchors.verticalCenter: parent.verticalCenter
                checked: Notifs.doNotDisturb
                onToggled: value => Notifs.doNotDisturb = value
            }
        }

        TextRow {
            label: "Notification history"
            detail: "Live notifications retained by the shell"
            value: `${Notifs.history.length} items`
        }

        ActionRow {
            label: "Clear notification history"
            detail: "Dismiss every item currently in the notification center"
            divider: false
            action: "Clear all"
            enabled: Notifs.history.length > 0
            onTriggered: Notifs.dismissAll()
        }
    }

    SettingsCard {
        title: "Banner behavior"

        SliderRow { setting: "notificationTimeoutMs" }
        SliderRow {
            setting: "notificationTimeoutCriticalMs"
            zeroLabel: "Never"
        }
        SliderRow { setting: "notificationHistoryLimit" }
        SliderRow { setting: "maxVisibleToasts"; divider: false }
    }

    SettingsCard {
        title: "Application rules"
        subtitle: "Apps appear here after they send a notification."

        TextRow {
            visible: Notifs.applications.length === 0
            label: "No applications remembered yet"
            detail: "Application controls will appear after the first notification arrives."
            divider: false
        }

        Repeater {
            model: Notifs.applications

            Column {
                required property var modelData

                readonly property var app: modelData

                width: parent.width

                SettingRow {
                    label: app.name
                    detail: app.id
                    controlWidth: 48

                    SettingsToggle {
                        anchors.right: parent.right
                        anchors.verticalCenter: parent.verticalCenter
                        checked: Notifs.appRule(app.id).enabled
                        onToggled: value => Notifs.setAppRule(app.id, { enabled: value })
                    }
                }

                SettingRow {
                    label: "Show on lock screen"
                    detail: "Allow this app's notifications on the lock screen"
                    controlWidth: 48

                    SettingsToggle {
                        anchors.right: parent.right
                        anchors.verticalCenter: parent.verticalCenter
                        checked: Notifs.appRule(app.id).showOnLockScreen
                        onToggled: value => Notifs.setAppRule(app.id, { showOnLockScreen: value })
                    }
                }

                SettingRow {
                    label: "Show content on lock screen"
                    detail: "Show message details when this app is visible there"
                    divider: false
                    controlWidth: 48

                    SettingsToggle {
                        anchors.right: parent.right
                        anchors.verticalCenter: parent.verticalCenter
                        checked: Notifs.appRule(app.id).showContentOnLockScreen
                        onToggled: value => Notifs.setAppRule(app.id, { showContentOnLockScreen: value })
                    }
                }
            }
        }
    }

    SettingsCard {
        title: "Focus sessions"
        subtitle: "A focus session binds quiet mode and Caffeine to the current workspace."

        SettingRow {
            label: "Keep the screen awake"
            detail: Caffeine.enabled
                ? "The display will not blank or lock while this is on"
                : "Idle timings on Power & Lock apply normally"
            controlWidth: 48

            SettingsToggle {
                anchors.right: parent.right
                anchors.verticalCenter: parent.verticalCenter
                checked: Caffeine.enabled
                onToggled: value => Caffeine.enabled = value
            }
        }

        SettingRow {
            id: durationRow

            label: "Default duration"
            detail: "Used by Super+Shift+F and Quick Settings"
            controlWidth: 264

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

                Repeater {
                    model: [25, 45, 60, 90]

                    SettingsButton {
                        required property int modelData

                        text: `${modelData}m`
                        tone: DesktopPreferences.get("focusDurationMinutes") === modelData ? "accent" : "normal"
                        onClicked: SystemSettings.commitPreference("focusDurationMinutes", modelData)
                    }
                }
            }
        }

        SettingRow {
            label: FocusSession.active ? `Active on ${FocusSession.workspaceLabel}` : "No active focus session"
            detail: FocusSession.active ? `${FocusSession.remainingText} remaining` : "Start one without leaving Settings"
            divider: false
            controlWidth: 120

            SettingsButton {
                anchors.right: parent.right
                anchors.verticalCenter: parent.verticalCenter
                text: FocusSession.active ? "Show controls" : "Start focus"
                tone: FocusSession.active ? "normal" : "accent"
                onClicked: FocusSession.reveal()
            }
        }
    }
}
