#compdef bamrescue
# SPDX-License-Identifier: ISC

# bamrescue(1) completion for Zsh                          -*- shell-script -*-
#
# This file is part of bamrescue.
#
# Copyright (C) 2017-2018 Jérémie Roquet <jroquet@arkanosis.net>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
# USE OR PERFORMANCE OF THIS SOFTWARE.

_bamrescue_check() {
    _arguments \
        {-q,--quiet}'[Do not output statistics, stop at first error]' \
        '--threads=[Number of threads to use, 0 for auto (default: 0)]' \
        '*:bam file:_files -g "*.bam(-.)"'A
}

_bamrescue_rescue() {
    _arguments \
        '--threads=[Number of threads to use, 0 for auto (default: 0)]' \
        '*:bam file:_files -g "*.bam(-.)"'
}

_bamrescue_command() {
    local -a _bamrescue_cmds
    _bamrescue_cmds=(
        'check:Check BAM file for corruption'
        'rescue:Keep only non-corrupted blocks of BAM file'
    )

    if ((CURRENT == 1)); then
        _describe -t commands 'bamrescue commands' _bamrescue_cmds
    else
        local curcontext="$curcontext"
        cmd="${${_bamrescue_cmds[(r)$words[1]:*]%%:*}}"
        if (($#cmd)); then
            if (( $+functions[_bamrescue_$cmd] )); then
                _bamrescue_$cmd
            else
                _message "no options for $cmd"
            fi
        else
            _message "no more options"
        fi
    fi
}

_arguments \
    {-h,--help}'[Show help text]' \
    '--version[Show version]' \
    '*::bamrescue commands:_bamrescue_command'
