#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eu
set -o pipefail

command="${1:?}"
shift

command -v systemctl >/dev/null || exit 0

case "$command" in
    install-system-units)
        systemctl --no-reload preset "$@"
        ;;

    install-user-units)
        systemctl --no-reload preset --global "$@"
        ;;

    remove-system-units)
        if [ -d /run/systemd/system ]; then
            systemctl --no-reload disable --now --no-warn "$@"
        else
            systemctl --no-reload disable --no-warn "$@"
        fi
        ;;

    remove-user-units)
        systemctl --global disable --no-warn "$@"

        [ -d /run/systemd/system ] || exit 0

        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
        for user in $users; do
            SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
                    systemctl --user -M "$user@" disable --now --no-warn "$@" &
        done
        wait
        ;;

    mark-restart-system-units)
        [ -d /run/systemd/system ] || exit 0

        for unit in "$@"; do
            systemctl set-property "$unit" Markers=+needs-restart &
        done
        wait
        ;;

    mark-restart-user-units)
        [ -d /run/systemd/system ] || exit 0

        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
        for user in $users; do
            for unit in "$@"; do
                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
                        systemctl --user -M "$user@" set-property "$unit" Markers=+needs-restart &
            done
        done
        wait
        ;;

    system-reload-restart|system-reload|system-restart)
        if [ -n "$*" ]; then
            echo "Unexpected arguments for '$command': $*"
            exit 2
        fi

        [ -d /run/systemd/system ] || exit 0

        if [[ "$command" =~ reload ]]; then
            systemctl daemon-reload
        fi

        if [[ "$command" =~ restart ]]; then
            systemctl reload-or-restart --marked
        fi
        ;;

    user-reload-restart|user-reload|user-restart|user-reexec)
        if [ -n "$*" ]; then
            echo "Unexpected arguments for '$command': $*"
            exit 2
        fi

        [ -d /run/systemd/system ] || exit 0

        users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')

        if [[ "$command" =~ reexec ]]; then
            for user in $users; do
                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
                        systemctl --user -M "$user@" daemon-reexec &
            done
            wait
        fi

        if [[ "$command" =~ reload ]]; then
            for user in $users; do
                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
                        systemctl --user -M "$user@" daemon-reload &
            done
            wait
        fi

        if [[ "$command" =~ restart ]]; then
            for user in $users; do
                SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
                        systemctl --user -M "$user@" reload-or-restart --marked &
            done
            wait
        fi
        ;;

    *)
        echo "Unknown verb '$command'"
        exit 3
        ;;
esac
