# Bash completion script for foot
_foot()
{
    COMPREPLY=()

    local cur prev flags word commands match previous_words i offset
    flags=(
        "--app-id"
        "--check-config"
        "--config"
        "--font"
        "--fullscreen"
        "--help"
        "--hold"
        "--log-colorize"
        "--log-level"
        "--log-no-syslog"
        "--login-shell"
        "--maximized"
        "--override"
        "--print-pid"
        "--server"
        "--term"
        "--title"
        "--version"
        "--window-size-pixels"
        "--window-size-chars"
        "--working-directory"
    )
    flags="${flags[@]}"
    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}

    # check if positional argument is completed
    previous_words=( "${COMP_WORDS[@]}" )
    unset previous_words[-1]
    commands=$(compgen -c | grep -vFx "$(compgen -k)" | grep -vE '^([.:[]|foot)$' | sort -u)
    i=0
    for word in "${previous_words[@]}" ; do
        match=$(printf "$commands" | grep -Fx "$word" 2>/dev/null)
        if [[ ! -z "$match" ]] ; then
            if [[ ${COMP_WORDS[i-1]} =~ ^(--app-id|--config|--font|--log-level|--term|--title|--window-size-pixels|--window-size-chars|--working-directory)$ ]] ; then
                (( i++ ))
                continue
            fi
            # positional argument found
            offset=$i
        fi
        (( i++ ))
    done

    if [[ ! -z "$offset" ]] ; then
        # depends on bash_completion being available
        declare -F _command_offset >/dev/null || return 1
        _command_offset $offset
    elif [[ ${cur} == --* ]] ; then
        COMPREPLY=( $(compgen -W "${flags}" -- ${cur}) )
    elif [[ ${prev} =~ ^(--config|--print-pid|--server)$ ]] ; then
        compopt -o default
    elif [[ ${prev} == '--working-directory' ]] ; then
        compopt -o dirnames
    elif [[ ${prev} == '--term' ]] ; then
        # check if toe is available
        which toe > /dev/null || return 1
        COMPREPLY=( $(compgen -W "$(toe -a | awk '$1 ~ /[+]/ {next}; {print $1}')" -- ${cur}) )
    elif [[ ${prev} == '--font' ]] ; then
        # check if fc-list is available
        which fc-list > /dev/null || return 1
        COMPREPLY=( $(compgen -W "$(fc-list : family | sed 's/,/\n/g' | uniq | tr -d ' ')" -- ${cur}) )
    elif [[ ${prev} == '--log-level' ]] ; then
        COMPREPLY=( $(compgen -W "none error warning info" -- ${cur}) )
    elif [[ ${prev} == '--log-colorize' ]] ; then
        COMPREPLY=( $(compgen -W "never always auto" -- ${cur}) )
    elif [[ ${prev} =~ ^(--app-id|--help|--override|--title|--version|--window-size-chars|--window-size-pixels|--check-config)$ ]] ; then
        : # don't autocomplete for these flags
    else
        # complete commands from $PATH
        COMPREPLY=( $(compgen -c -- ${cur}) )
    fi

    return 0
}

complete -F _foot foot
