pragma Singleton

// ─────────────────────────────────────────────────────────────────────────────
// User-facing knobs. Everything here is something you might reasonably want to
// change without understanding the rest of the shell.
//
// Theme.qml holds *how it looks*; this holds *what it does*.
// ─────────────────────────────────────────────────────────────────────────────

import Quickshell
import QtQuick

Singleton {
    id: root

    // ── Clock ───────────────────────────────────────────────────────────────
    // Carried over from GNOME: 12-hour, weekday + date shown, seconds on.
    readonly property bool use24Hour: DesktopPreferences.get("use24Hour")
    readonly property bool showSeconds: DesktopPreferences.get("showSeconds")
    readonly property bool showWeekday: DesktopPreferences.get("showWeekday")

    // ── Weather ─────────────────────────────────────────────────────────────
    // Coordinates taken from the GNOME night-light setting, which had already
    // resolved the location. Uses Open-Meteo, which needs no API key.
    readonly property real latitude: DesktopPreferences.get("weatherLatitude")
    readonly property real longitude: DesktopPreferences.get("weatherLongitude")
    // Open-Meteo returns coordinates but no friendly place name. Keep the
    // label deliberately general rather than exposing precise coordinates in
    // the UI or guessing at a city from them.
    readonly property string weatherLocation: DesktopPreferences.get("weatherLocation")
    readonly property string temperatureUnit: DesktopPreferences.get("temperatureUnit")
    readonly property int weatherRefreshMinutes: DesktopPreferences.get("weatherRefreshMinutes")

    // ── Vitals ──────────────────────────────────────────────────────────────
    // The GNOME Vitals extension showed processor usage, memory usage and GPU
    // usage, in that order. Same here.
    readonly property int vitalsIntervalMs: DesktopPreferences.get("vitalsIntervalMs")
    readonly property bool showCpu: DesktopPreferences.get("showCpu")
    readonly property bool showMemory: DesktopPreferences.get("showMemory")
    readonly property bool showGpu: DesktopPreferences.get("showGpu")

    // amdgpu exposes utilisation here. Verified present on this machine; the
    // widget hides itself if the path is missing rather than showing zeros.
    readonly property string gpuBusyPath: DesktopPreferences.get("gpuBusyPath")

    // ── Night light ─────────────────────────────────────────────────────────
    // Matches the (disabled) GNOME schedule: 3500K from 17:00 to 10:00.
    readonly property int nightLightTemperature: DesktopPreferences.get("nightLightTemperature")
    readonly property real nightLightFrom: DesktopPreferences.get("nightLightFrom")
    readonly property real nightLightTo: DesktopPreferences.get("nightLightTo")
    readonly property bool nightLightEnabledByDefault: DesktopPreferences.get("nightLightEnabled")

    // ── Notifications ───────────────────────────────────────────────────────
    readonly property int notificationTimeoutMs: DesktopPreferences.get("notificationTimeoutMs")
    readonly property int notificationTimeoutCriticalMs: DesktopPreferences.get("notificationTimeoutCriticalMs") // 0 = never auto-expire
    readonly property int notificationHistoryLimit: DesktopPreferences.get("notificationHistoryLimit")
    readonly property int maxVisibleToasts: DesktopPreferences.get("maxVisibleToasts")

    // ── Focus ──────────────────────────────────────────────────────────────
    // One deliberate default rather than a preset picker: quick settings and
    // the keyboard shortcut should start a useful session in one action.
    readonly property int focusDurationMinutes: DesktopPreferences.get("focusDurationMinutes")

    // ── Dock ────────────────────────────────────────────────────────────────
    // Pinned apps, in order, taken from the GNOME dash favourites.
    readonly property var dockPinned: DesktopPreferences.get("dockPinned")

    // Dash-to-Dock was set to intellihide against all windows: the dock hides
    // when any window would overlap it, and comes back on hover.
    readonly property bool dockAutohide: DesktopPreferences.get("dockAutohide")

    // 0: reveal the instant the pointer reaches the bottom edge. A reveal delay
    // is indistinguishable from lag, because the user has already committed to
    // the gesture by the time the strip is hit.
    readonly property int dockRevealDelayMs: DesktopPreferences.get("dockRevealDelayMs")

    // Hiding keeps a delay, so brushing past the bottom edge or crossing the
    // gap between two icons doesn't make the dock flicker.
    readonly property int dockHideDelayMs: DesktopPreferences.get("dockHideDelayMs")

    // ── Capture ─────────────────────────────────────────────────────────────
    readonly property string screenshotDir: DesktopPreferences.get("screenshotDir")
    readonly property string recordingDir: DesktopPreferences.get("recordingDir")
    // Passed to wf-recorder. Uses VAAPI on the AMD card so recording does not
    // cost CPU while gaming.
    readonly property string recorderArgs: DesktopPreferences.get("recorderArgs")
}
