#compdef hey

_hey_dispatch () {
    local cmd="$@"
    local offset=$#
    CURRENT=$((CURRENT-$offset))
    words=($cmd "${words[$((2 + offset)),-1]}")
    _$cmd
}

_hey_command_list () {
    hey | sed '1,/Available commands:/d' | awk '{ print $1 }'
}

_hey () {
    local -a commands
    IFS=$'\n' commands=($(_hey_command_list))

    if (( CURRENT == 2 )); then
        _describe -t commands "hey commands" commands
        return
    fi
    integer ret=1
    case ${words[2]} in
        ch|channel) _hey_dispatch nix-channel ;;
        b|build)    _hey_dispatch nix-build ;;
        ch|check)   _hey_dispatch nix flake check ;;
        sh|show)    _hey_dispatch nix flake show ;;
        s|search)   _hey_dispatch nix search nixpkgs ;;
        -*)         _hey_dispatch nix-env ;;
        *)          _message "Command not found: ${words[2]}" ;;
    esac
    return ret
}

_hey
