_backup_greetd_configs() {
    local root=${1:-/}
    local config="${root%/}/etc/greetd/config.toml"
    [[ -f "$config" ]] || return 0
    [[ -e "$config.bak" || -L "$config.bak" ]] && return 0
    # A config installed by this package is not a previous greeter configuration.
    cmp -s -- "$config" "${root%/}/usr/share/pearl-greeter/greetd.toml" && return 0
    cp -p -- "$config" "$config.bak" || {
        rm -f -- "$config.bak"
        return 1
    }
    echo "==> Previous greetd configuration backed up to $config.bak"
}

pre_install() {
    _backup_greetd_configs
}

pre_upgrade() {
    _backup_greetd_configs
}

_provision_pearl_greeter() {
    systemd-sysusers /usr/lib/sysusers.d/pearl-greeter.conf || return 1
    systemd-tmpfiles --create /usr/lib/tmpfiles.d/pearl-greeter.conf || return 1
}

# The appearance sync socket must be live on every install and upgrade, not only
# fresh ones: users coming from packages without the socket, or whose socket
# never started, would otherwise silently fall back to pkexec, which cannot
# prompt when Pearl runs outside a logind session scope. Activate only when it
# is missing so an already running socket is never disturbed.
_enable_greeter_sync() {
    if systemctl is-enabled --quiet pearl-greeter-sync.socket &&
        systemctl is-active --quiet pearl-greeter-sync.socket; then
        return 0
    fi
    systemctl enable --now pearl-greeter-sync.socket 2>/dev/null ||
        echo '==> Activate appearance sync later: sudo systemctl enable --now pearl-greeter-sync.socket'
}

_install_greetd_config() {
    local root=${1:-/}
    local config="${root%/}/etc/greetd/config.toml"
    _backup_greetd_configs "$root" || return 1
    install -Dm644 -- "${root%/}/usr/share/pearl-greeter/greetd.toml" "$config" || return 1
    echo '==> Installed Pearl Greeter configuration in /etc/greetd/config.toml (VT7).'
}

post_install() {
    _provision_pearl_greeter || return 1
    _install_greetd_config || return 1
    /usr/lib/pearl/pearl-greeter-setup enable || return 1
    _enable_greeter_sync
    echo '==> Pearl Greeter is selected for the next boot. The running session was not restarted.'
    echo '    Configuration: /etc/pearl/greeter.json and /etc/greetd/config.toml'
    echo '    Restore the previous boot setup: sudo /usr/lib/pearl/pearl-greeter-setup restore'
}

post_upgrade() {
    # Replace the standard config on upgrades too, including older split-config installs.
    # Keep disabled services and later display-manager choices unchanged.
    _provision_pearl_greeter || return 1
    _install_greetd_config || return 1
    _enable_greeter_sync
    echo '==> Pearl Greeter updated; original greetd config remains in /etc/greetd/config.toml.bak.'
    echo '    Password entry is now enabled before Sign in by default.'
    echo '    If your preserved /etc/pearl/greeter.json has password_first: false, set it to true for one-action password login.'
    echo '    Keep false only for custom PAM stacks that request another credential before the password.'
}

pre_remove() {
    /usr/lib/pearl/pearl-greeter-setup restore
}
