#!/bin/bash

__skip_cursor_index_in_current_word() {
    local remaining="${COMP_LINE}"

    local word
    for word in "${COMP_WORDS[@]::COMP_CWORD}"; do
        remaining="${remaining##*([[:space:]])"${word}"*([[:space:]])}"
    done

    local -ir index="$((COMP_POINT - ${#COMP_LINE} + ${#remaining}))"
    if [[ "${index}" -le 0 ]]; then
        printf 0
    else
        printf %s "${index}"
    fi
}

# positional arguments:
#
# - 1: the current (sub)command's count of positional arguments
#
# required variables:
#
# - repeating_flags: the repeating flags that the current (sub)command can accept
# - non_repeating_flags: the non-repeating flags that the current (sub)command can accept
# - repeating_options: the repeating options that the current (sub)command can accept
# - non_repeating_options: the non-repeating options that the current (sub)command can accept
# - positional_number: value ignored
# - unparsed_words: unparsed words from the current command line
#
# modified variables:
#
# - non_repeating_flags: remove flags for this (sub)command that are already on the command line
# - non_repeating_options: remove options for this (sub)command that are already on the command line
# - positional_number: set to the current positional number
# - unparsed_words: remove all flags, options, and option values for this (sub)command
__skip_offer_flags_options() {
    local -ir positional_count="${1}"
    positional_number=0

    local was_flag_option_terminator_seen=false
    local is_parsing_option_value=false

    local -ar unparsed_word_indices=("${!unparsed_words[@]}")
    local -i word_index
    for word_index in "${unparsed_word_indices[@]}"; do
        if "${is_parsing_option_value}"; then
            # This word is an option value:
            # Reset marker for next word iff not currently the last word
            [[ "${word_index}" -ne "${unparsed_word_indices[${#unparsed_word_indices[@]} - 1]}" ]] && is_parsing_option_value=false
            unset "unparsed_words[${word_index}]"
            # Do not process this word as a flag or an option
            continue
        fi

        local word="${unparsed_words["${word_index}"]}"
        if ! "${was_flag_option_terminator_seen}"; then
            case "${word}" in
            --)
                unset "unparsed_words[${word_index}]"
                # by itself -- is a flag/option terminator, but if it is the last word, it is the start of a completion
                if [[ "${word_index}" -ne "${unparsed_word_indices[${#unparsed_word_indices[@]} - 1]}" ]]; then
                    was_flag_option_terminator_seen=true
                fi
                continue
                ;;
            -*)
                # ${word} is a flag or an option
                # If ${word} is an option, mark that the next word to be parsed is an option value
                local option
                for option in "${repeating_options[@]}" "${non_repeating_options[@]}"; do
                    [[ "${word}" = "${option}" ]] && is_parsing_option_value=true && break
                done

                # Remove ${word} from ${non_repeating_flags} or ${non_repeating_options} so it isn't offered again
                local not_found=true
                local -i index
                for index in "${!non_repeating_flags[@]}"; do
                    if [[ "${non_repeating_flags[${index}]}" = "${word}" ]]; then
                        unset "non_repeating_flags[${index}]"
                        non_repeating_flags=("${non_repeating_flags[@]}")
                        not_found=false
                        break
                    fi
                done
                if "${not_found}"; then
                    for index in "${!non_repeating_flags[@]}"; do
                        if [[ "${non_repeating_flags[${index}]}" = "${word}" ]]; then
                            unset "non_repeating_flags[${index}]"
                            non_repeating_flags=("${non_repeating_flags[@]}")
                            break
                        fi
                    done
                fi
                unset "unparsed_words[${word_index}]"
                continue
                ;;
            esac
        fi

        # ${word} is neither a flag, nor an option, nor an option value
        if [[ "${positional_number}" -lt "${positional_count}" || "${positional_count}" -lt 0 ]]; then
            # ${word} is a positional
            ((positional_number++))
            unset "unparsed_words[${word_index}]"
        else
            if [[ -z "${word}" ]]; then
                # Could be completing a flag, option, or subcommand
                positional_number=-1
            else
                # ${word} is a subcommand or invalid, so stop processing this (sub)command
                positional_number=-2
            fi
            break
        fi
    done

    unparsed_words=("${unparsed_words[@]}")

    if\
        ! "${was_flag_option_terminator_seen}"\
        && ! "${is_parsing_option_value}"\
        && [[ ("${cur}" = -* && "${positional_number}" -ge 0) || "${positional_number}" -eq -1 ]]
    then
        COMPREPLY+=($(compgen -W "${repeating_flags[*]} ${non_repeating_flags[*]} ${repeating_options[*]} ${non_repeating_options[*]}" -- "${cur}"))
    fi
}

__skip_add_completions() {
    local completion
    while IFS='' read -r completion; do
        COMPREPLY+=("${completion}")
    done < <(IFS=$'\n' compgen "${@}" -- "${cur}")
}

__skip_custom_complete() {
    if [[ -n "${cur}" || -z ${COMP_WORDS[${COMP_CWORD}]} || "${COMP_LINE:${COMP_POINT}:1}" != ' ' ]]; then
        local -ar words=("${COMP_WORDS[@]}")
    else
        local -ar words=("${COMP_WORDS[@]::${COMP_CWORD}}" '' "${COMP_WORDS[@]:${COMP_CWORD}}")
    fi

    "${COMP_WORDS[0]}" "${@}" "${words[@]}"
}

_skip() {
    local state
    state="$(shopt -p;shopt -po)"
    trap "${state//$'\n'/;}" RETURN
    shopt -s extglob
    set +o history +o posix

    local -xr SAP_SHELL=bash
    local -x SAP_SHELL_VERSION
    SAP_SHELL_VERSION="$(IFS='.';printf %s "${BASH_VERSINFO[*]}")"
    local -r SAP_SHELL_VERSION

    local -r cur="${2}"
    local -r prev="${3}"

    local -i positional_number
    local -a unparsed_words=("${COMP_WORDS[@]:1:${COMP_CWORD}}")

    local -a repeating_flags=()
    local -a non_repeating_flags=(-h --help)
    local -a repeating_options=()
    local -a non_repeating_options=()
    __skip_offer_flags_options 0

    # Offer subcommand / subcommand argument completions
    local -r subcommand="${unparsed_words[0]}"
    unset 'unparsed_words[0]'
    unparsed_words=("${unparsed_words[@]}")
    case "${subcommand}" in
    version|doctor|checkup|upgrade|create|init|verify|icon|android|export|devices|test|help)
        # Offer subcommand argument completions
        "_skip_${subcommand}"
        ;;
    *)
        # Offer subcommand completions
        COMPREPLY+=($(compgen -W 'version doctor checkup upgrade create init verify icon android export devices test help' -- "${cur}"))
        ;;
    esac
}

_skip_version() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    esac
}

_skip_doctor() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --native --no-native --fail-fast --no-fail-fast -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    esac
}

_skip_checkup() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --double-check --native --native-app --native-model --fail-fast --no-fail-fast -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home -c --configuration --project-name --module-name)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--project-name')
        return
        ;;
    '--module-name')
        return
        ;;
    esac
}

_skip_upgrade() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    esac
}

_skip_create() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune --chain --no-chain --zero --no-zero --git-repo --no-git-repo --free --show-tree --no-show-tree --kotlincompat --no-kotlincompat --bridged --no-bridged --module-tests --no-module-tests --fastlane --no-fastlane --github --no-github --validate-package --no-validate-package -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch)
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home -d --dir --resource-path --swift-package-version --ios-min-version --macos-min-version --test-case-mode)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    '-d'|'--dir')
        return
        ;;
    '--resource-path')
        return
        ;;
    '--swift-package-version')
        return
        ;;
    '--ios-min-version')
        return
        ;;
    '--macos-min-version')
        return
        ;;
    '--test-case-mode')
        __skip_add_completions -W 'testing'$'\n''xctest'
        return
        ;;
    esac
}

_skip_init() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --chain --no-chain --zero --no-zero --git-repo --no-git-repo --free --show-tree --no-show-tree --kotlincompat --no-kotlincompat --bridged --no-bridged --module-tests --no-module-tests --fastlane --no-fastlane --github --no-github --validate-package --no-validate-package --native-app --transpiled-app --native-model --transpiled-model --build --no-build --test --no-test --verify --no-verify --no-icon --apk --no-apk --ipa --no-ipa --open-xcode --open-gradle -h --help)
    repeating_options=(--icon)
    non_repeating_options=(-o --output --log-file -d --dir --resource-path --swift-package-version --ios-min-version --macos-min-version --test-case-mode --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --appid --icon-background --icon-foreground --icon-shadow --icon-inset --version)
    __skip_offer_flags_options -1

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '-d'|'--dir')
        return
        ;;
    '--resource-path')
        return
        ;;
    '--swift-package-version')
        return
        ;;
    '--ios-min-version')
        return
        ;;
    '--macos-min-version')
        return
        ;;
    '--test-case-mode')
        __skip_add_completions -W 'testing'$'\n''xctest'
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--appid')
        return
        ;;
    '--icon')
        return
        ;;
    '--icon-background')
        return
        ;;
    '--icon-foreground')
        return
        ;;
    '--icon-shadow')
        return
        ;;
    '--icon-inset')
        return
        ;;
    '--version')
        return
        ;;
    esac
}

_skip_verify() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --free --no-free --fastlane --no-fastlane --fail-fast --no-fail-fast --fix --no-fix -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --project)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--project')
        return
        ;;
    esac
}

_skip_icon() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --open-preview --android --no-android --darwin --no-darwin --random-icon --random-background -h --help)
    repeating_options=()
    non_repeating_options=(-d --dir -o --output --log-file --android-path --darwin-path --foreground --background --inset --shadow)
    __skip_offer_flags_options -1

    # Offer option value completions
    case "${prev}" in
    '-d'|'--dir')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--android-path')
        return
        ;;
    '--darwin-path')
        return
        ;;
    '--foreground')
        return
        ;;
    '--background')
        return
        ;;
    '--inset')
        return
        ;;
    '--shadow')
        return
        ;;
    esac
}

_skip_android() {
    repeating_flags=()
    non_repeating_flags=(-h --help)
    repeating_options=()
    non_repeating_options=()
    __skip_offer_flags_options 0

    # Offer subcommand / subcommand argument completions
    local -r subcommand="${unparsed_words[0]}"
    unset 'unparsed_words[0]'
    unparsed_words=("${unparsed_words[@]}")
    case "${subcommand}" in
    build|run|test|home|sdk|emulator|toolchain)
        # Offer subcommand argument completions
        "_skip_android_${subcommand}"
        ;;
    *)
        # Offer subcommand completions
        COMPREPLY+=($(compgen -W 'build run test home sdk emulator toolchain' -- "${cur}"))
        ;;
    esac
}

_skip_android_build() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch)
    non_repeating_options=(-d --dir -o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home)
    __skip_offer_flags_options -1

    # Offer option value completions
    case "${prev}" in
    '-d'|'--dir')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    esac
}

_skip_android_run() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --cleanup --no-cleanup --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch --env --copy)
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --android-serial --android-connect-timeout --remote-folder --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home)
    __skip_offer_flags_options -1

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--android-serial')
        return
        ;;
    '--android-connect-timeout')
        return
        ;;
    '--remote-folder')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    '--env')
        return
        ;;
    '--copy')
        return
        ;;
    esac
}

_skip_android_test() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --cleanup --no-cleanup --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune --apk --no-apk -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch --env --copy)
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --android-serial --android-connect-timeout --remote-folder --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home --testing-library --event-stream-output-path)
    __skip_offer_flags_options -1

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--android-serial')
        return
        ;;
    '--android-connect-timeout')
        return
        ;;
    '--remote-folder')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    '--testing-library')
        return
        ;;
    '--env')
        return
        ;;
    '--copy')
        return
        ;;
    '--event-stream-output-path')
        return
        ;;
    esac
}

_skip_android_home() {
    repeating_flags=()
    non_repeating_flags=(-h --help)
    repeating_options=()
    non_repeating_options=()
    __skip_offer_flags_options 0

    # Offer subcommand / subcommand argument completions
    local -r subcommand="${unparsed_words[0]}"
    unset 'unparsed_words[0]'
    unparsed_words=("${unparsed_words[@]}")
    case "${subcommand}" in
    install)
        # Offer subcommand argument completions
        "_skip_android_home_${subcommand}"
        ;;
    *)
        # Offer subcommand completions
        COMPREPLY+=($(compgen -W 'install' -- "${cur}"))
        ;;
    esac
}

_skip_android_home_install() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    esac
}

_skip_android_sdk() {
    repeating_flags=()
    non_repeating_flags=(-h --help)
    repeating_options=()
    non_repeating_options=()
    __skip_offer_flags_options 0

    # Offer subcommand / subcommand argument completions
    local -r subcommand="${unparsed_words[0]}"
    unset 'unparsed_words[0]'
    unparsed_words=("${unparsed_words[@]}")
    case "${subcommand}" in
    list|install|uninstall)
        # Offer subcommand argument completions
        "_skip_android_sdk_${subcommand}"
        ;;
    *)
        # Offer subcommand completions
        COMPREPLY+=($(compgen -W 'list install uninstall' -- "${cur}"))
        ;;
    esac
}

_skip_android_sdk_list() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --remote --devel -h --help)
    repeating_options=()
    non_repeating_options=(--xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home -o --output --log-file)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    esac
}

_skip_android_sdk_install() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune --reinstall --verify --no-verify -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch)
    non_repeating_options=(--version --ndk-version -o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '--version')
        return
        ;;
    '--ndk-version')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    esac
}

_skip_android_sdk_uninstall() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch)
    non_repeating_options=(--version -o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '--version')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    esac
}

_skip_android_emulator() {
    repeating_flags=()
    non_repeating_flags=(-h --help)
    repeating_options=()
    non_repeating_options=()
    __skip_offer_flags_options 0

    # Offer subcommand / subcommand argument completions
    local -r subcommand="${unparsed_words[0]}"
    unset 'unparsed_words[0]'
    unparsed_words=("${unparsed_words[@]}")
    case "${subcommand}" in
    create|list|launch)
        # Offer subcommand argument completions
        "_skip_android_emulator_${subcommand}"
        ;;
    *)
        # Offer subcommand completions
        COMPREPLY+=($(compgen -W 'create list launch' -- "${cur}"))
        ;;
    esac
}

_skip_android_emulator_create() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --android-api-level --device-profile -n --name --package --system-image --arch)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--device-profile')
        return
        ;;
    '-n'|'--name')
        return
        ;;
    '--package')
        return
        ;;
    '--system-image')
        return
        ;;
    '--arch')
        return
        ;;
    esac
}

_skip_android_emulator_list() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    esac
}

_skip_android_emulator_launch() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --background --no-background --headless --no-headless -h --help)
    repeating_options=()
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home -n --name --logcat --android-connect-timeout)
    __skip_offer_flags_options -1

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '-n'|'--name')
        return
        ;;
    '--logcat')
        return
        ;;
    '--android-connect-timeout')
        return
        ;;
    esac
}

_skip_android_toolchain() {
    repeating_flags=()
    non_repeating_flags=(-h --help)
    repeating_options=()
    non_repeating_options=()
    __skip_offer_flags_options 0

    # Offer subcommand / subcommand argument completions
    local -r subcommand="${unparsed_words[0]}"
    unset 'unparsed_words[0]'
    unparsed_words=("${unparsed_words[@]}")
    case "${subcommand}" in
    version)
        # Offer subcommand argument completions
        "_skip_android_toolchain_${subcommand}"
        ;;
    *)
        # Offer subcommand completions
        COMPREPLY+=($(compgen -W 'version' -- "${cur}"))
        ;;
    esac
}

_skip_android_toolchain_version() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --bridge --no-bridge --aggregate --no-aggregate --prune --no-prune -h --help)
    repeating_options=(-Xswiftc -Xcc -Xlinker -Xcxx --arch)
    non_repeating_options=(-o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --swift-version --sdk --ndk --toolchain --package-path --scratch-path -c --configuration --android-api-level --swift-sdk-home)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--swift-version')
        return
        ;;
    '--sdk')
        return
        ;;
    '--ndk')
        return
        ;;
    '--toolchain')
        return
        ;;
    '--package-path')
        return
        ;;
    '--scratch-path')
        return
        ;;
    '-Xswiftc')
        return
        ;;
    '-Xcc')
        return
        ;;
    '-Xlinker')
        return
        ;;
    '-Xcxx')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    '--android-api-level')
        return
        ;;
    '--swift-sdk-home')
        return
        ;;
    esac
}

_skip_export() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --build --no-build --show-tree --no-show-tree --release --debug --export-project --no-export-project --ios --no-ios --ios-sim --no-ios-sim --android --no-android --nested --no-nested -h --help)
    repeating_options=(--module --arch)
    non_repeating_options=(-d --dir -o --output --log-file --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home --package --project --summary-file --sdk-path --scheme-name)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-d'|'--dir')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '--package')
        return
        ;;
    '--module')
        return
        ;;
    '--project')
        return
        ;;
    '--summary-file')
        return
        ;;
    '--sdk-path')
        return
        ;;
    '--scheme-name')
        return
        ;;
    '--arch')
        __skip_add_completions -W 'automatic'$'\n''current'$'\n''default'$'\n''all'$'\n''aarch64'$'\n''armv7'$'\n''x86_64'
        return
        ;;
    esac
}

_skip_devices() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain -h --help)
    repeating_options=()
    non_repeating_options=(--xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home -o --output --log-file)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    esac
}

_skip_test() {
    repeating_flags=()
    non_repeating_flags=(-E --message-errout -v --verbose -q --quiet -J --json -j --json-compact -M --message-plain -A --json-array --plain --no-plain --test --no-test -h --help)
    repeating_options=(--filter)
    non_repeating_options=(-o --output --log-file --project --xunit --junit --max-column-length --xcodebuild --swift --gradle --adb --emulator --sdkmanager --avdmanager --java-home -c --configuration --summary-file --android-serial)
    __skip_offer_flags_options 0

    # Offer option value completions
    case "${prev}" in
    '-o'|'--output')
        return
        ;;
    '--log-file')
        return
        ;;
    '--filter')
        return
        ;;
    '--project')
        return
        ;;
    '--xunit')
        return
        ;;
    '--junit')
        return
        ;;
    '--max-column-length')
        return
        ;;
    '--xcodebuild')
        return
        ;;
    '--swift')
        return
        ;;
    '--gradle')
        return
        ;;
    '--adb')
        return
        ;;
    '--emulator')
        return
        ;;
    '--sdkmanager')
        return
        ;;
    '--avdmanager')
        return
        ;;
    '--java-home')
        return
        ;;
    '-c'|'--configuration')
        return
        ;;
    '--summary-file')
        return
        ;;
    '--android-serial')
        return
        ;;
    esac
}

_skip_help() {
    :
}

complete -o filenames -F _skip skip
