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

(( $+functions[_localectl_set-locale] )) ||
_localectl_set-locale() {
    local -a _locales locale_fields
    locale_fields=(LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME \
                   LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER \
                   LC_NAME LC_ADDRESS LC_TELEPHONE \
                   LC_MEASUREMENT LC_IDENTIFICATION)
    # LC_ALL is omitted on purpose

    local expl suf
    _locales=( ${(f)"$(_call_program locales "$service" list-locales)"} )
    compset -P1 '*='
    if [[ -prefix 1 *\= ]]; then
        local conf=${PREFIX%%\=*}
        _wanted locales expl "locales configs" \
            _combination localeconfs  confs=$conf locales "$@" -
    else
        compadd -S '=' $locale_fields
    fi
}

(( $+functions[_localectl_set-keymap] )) ||
_localectl_set-keymap() {
    local -a _keymaps
    if (( CURRENT <= 3 )); then
        _keymaps=( ${(f)"$(_call_program locales "$service" list-keymaps)"} )
        _describe keymaps _keymaps
    else
        _message "no more options"
    fi
}

(( $+functions[_localectl_set-x11-keymap] )) ||
_localectl_set-x11-keymap() {
    if (( $+commands[pkg-config] )); then
        local -a _file _layout _model _variant _options
        local _xorg_lst
        _xorg_lst=${"$($commands[pkg-config] xkeyboard-config --variable=xkb_base)"}
        _file=( ${(ps:\n\!:)"$(<$_xorg_lst/rules/base.lst)"} )
        _layout=( ${${${(M)${(f)_file[2]}:#  *}#  }%% *} )
        _model=( ${${${(M)${(f)_file[1]}:#  *}#  }%% *} )
        _variant=( ${${${(M)${(f)_file[3]}:#  *}#  }%% *} )
        _options=( ${${${(M)${(f)_file[4]}:#  *}#  }%% *} )
        #_layout=( ${(f)"$( echo $_file[1] | awk '/^  / {print $1}' )"} )
        #_model=( ${(f)"$(echo $_file[2] | awk '/^  / {print $1}')"} )
        #_variant=( ${(f)"$(echo $_file[3] | awk '/^  / {print $1}')"} )
        #_options=( ${(f)"$(echo ${_file[4]//:/\\:} | awk '/^  / {print $1}')"} )

        case $CURRENT in
            2) _describe layouts _layout ;;
            3) _describe models _model;;
            4) _describe variants _variant;;
            5) _describe options _options;;
            *) _message "no more options"
        esac
    fi
}

(( $+functions[_localectl_commands] )) ||
_localectl_commands() {
    local -a _localectl_cmds
    _localectl_cmds=(
        'status:Show current locale settings'
        'set-locale:Set system locale'
        'list-locales:Show known locales'
        'set-keymap:Set virtual console keyboard mapping'
        'list-keymaps:Show known virtual console keyboard mappings'
        'set-x11-keymap:Set X11 keyboard mapping'
        'list-x11-keymap-models:Show known X11 keyboard mapping models'
        'list-x11-keymap-layouts:Show known X11 keyboard mapping layouts'
        'list-x11-keymap-variants:Show known X11 keyboard mapping variants'
        'list-x11-keymap-options:Show known X11 keyboard mapping options'
    )
    if (( CURRENT == 1 )); then
        _describe -t commands 'localectl command' _localectl_cmds
    else
        local curcontext="$curcontext"
        cmd="${${_localectl_cmds[(r)$words[1]:*]%%:*}}"
        if (( $+functions[_localectl_$cmd] )); then
            _localectl_$cmd
        else
            _message "unknown localectl command: $words[1]"
        fi
    fi
}

_arguments \
    {-h,--help}'[Show this help]' \
    '--version[Show package version]' \
    "--no-convert[Don't convert keyboard mappings]" \
    '--no-pager[Do not pipe output into a pager]' \
    '--no-ask-password[Do not prompt for password]' \
    {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
    {-M+,--machine=}'[Operate on local container]:machine' \
    '*::localectl commands:_localectl_commands'
