#compdef bootctl
# SPDX-License-Identifier: LGPL-2.1-or-later

__bootctl() {
    bootctl --no-pager $@ 2>/dev/null
}

_bootctl_comp_ids() {
    local expl
    local -a ids
    __bootctl list | while read a b; do
        if [[ "$a" == "id:" ]]; then
            ids+="$b"
        fi
    done
    _wanted id expl 'boot id' compadd "$@" -a ids
}

_bootctl_set-default() {
    _bootctl_comp_ids
}

_bootctl_set-oneshot() {
    _bootctl_comp_ids
}

_bootctl_reboot-to-firmware() {
    local -a _completions
    _completions=( yes no )
    typeset -U _completions
   _describe 'possible values' _completions
}

(( $+functions[_bootctl_commands] )) || _bootctl_commands()
{
    local -a _bootctl_cmds
    _bootctl_cmds=(
        "status:Show status of installed systemd-boot and EFI variables"
        "install:Install systemd-boot to the ESP and EFI variables"
        "update:Update systemd-boot in the ESP and EFI variables"
        "remove:Remove systemd-boot from the ESP and EFI variables"
        "is-installed:Test whether systemd-boot is installed in the ESP"
        "random-seed:Initialize random seed in ESP and EFI variables"
        "systemd-efi-options:Query or set system options string in EFI variable"
        "reboot-to-firmware:Query or set reboot-to-firmware EFI flag"
        "list:List boot loader entries"
        "set-default:Set the default boot loader entry"
        "set-oneshot:Set the default boot loader entry only for the next boot"
    )
    if (( CURRENT == 1 )); then
        _describe -t commands 'bootctl command' _bootctl_cmds || compadd "$@"
    else
        local curcontext="$curcontext"
        cmd="${${_bootctl_cmds[(r)$words[1]:*]%%:*}}"
        if (( $+functions[_bootctl_$cmd] )); then
            _bootctl_$cmd
        else
            _message "no more options"
        fi
    fi
}

_arguments \
    {-h,--help}'[Prints a short help text and exits.]' \
    '--version[Prints a short version string and exits.]' \
    '--esp-path=[Path to the EFI System Partition (ESP)]:path:_directories' \
    '--boot-path=[Path to the $BOOT partition]:path:_directories' \
    {-p,--print-esp-path}'[Print path to the EFI system partition]' \
    {-x,--print-boot-path}'[Print path to the $BOOT partition]' \
    '--no-variables[Do not touch EFI variables]' \
    '--no-pager[Do not pipe output into a pager]' \
    '--graceful[Do not fail when locating ESP or writing fails]' \
    '*::bootctl command:_bootctl_commands'
