# bash completion for smartctl(8)

have smartctl &&
{
_smartctl_quietmode()
{
    COMPREPLY=( $( compgen -W 'errorsonly silent noserial' -- "$cur" ) )
}
_smartctl_device()
{
    local i opts='ata scsi sat marvell hpt cciss'
    for (( i=0; i <= 31; i++ )) ; do
        opts="$opts 3ware,$i"
    done
    COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) )
}
_smartctl_tolerance()
{
    COMPREPLY=( $( compgen -W 'normal conservative permissive \
        verypermissive' -- "$cur" ) )
}
_smartctl_badsum()
{
    COMPREPLY=( $( compgen -W 'warn exit ignore' -- "$cur" ) )
}
_smartctl_report()
{
    COMPREPLY=( $( compgen -W 'ioctl ataioctl scsiioctl' -- "$cur" ) )
}
_smartctl_powermode()
{
    COMPREPLY=( $( compgen -W 'never sleep standby idle' -- "$cur" ) )
}
_smartctl_feature()
{
    COMPREPLY=( $( compgen -W 'on off' -- "$cur" ) )
}
_smartctl_log()
{
    COMPREPLY=( $( compgen -W 'error selftest selective directory' -- "$cur" ) )
}
_smartctl_vendorattribute()
{
    COMPREPLY=( $( compgen -W 'help 9,minutes 9,seconds 9,halfminutes \
                9,temp 192,emergencyretractcyclect 193,loadunload \
                194,10xCelsius 194,unknown 198,offlinescanuncsectorct \
                200,writeerrorcount 201,detectedtacount 220,temp' -- "$cur" ) )
}
_smartctl_firmwarebug()
{
    COMPREPLY=( $( compgen -W 'none samsung samsung2 samsung3 swapid' \
        -- "$cur" ) )
}
_smartctl_presets()
{
    COMPREPLY=( $( compgen -W 'use ignore show showall' -- "$cur" ) )
}
_smartctl_test()
{
    COMPREPLY=( $( compgen -W 'offline short long conveyance select \
                afterselect,on afterselect,off pending scttempint' -- "$cur" ) )
}


_smartctl()
{
    local cur prev split=false

    COMPREPLY=()
    _get_comp_words_by_ref cur prev

    _split_longopt && split=true

    case $prev in
        -q|--quietmode)
            _smartctl_quietmode
            ;;
        -d|--device)
            _smartctl_device
            return 0
            ;;
        -t|--tolerance)
            _smartctl_tolerance
            return 0
            ;;
        -b|--badsum)
            _smartctl_badsum
            return 0
            ;;
        -r|--report)
            _smartctl_report
            return 0
            ;;
        -n|--nocheck)
            _smartctl_powermode
            return 0
            ;;
        -s|--smart|-o|--offlineauto|-S|--saveauto)
            _smartctl_feature
            return 0
            ;;
        -l|--log)
            _smartctl_log
            return 0
            ;;
        -v|--vendorattribute)
            _smartctl_vendorattribute
            return 0
            ;;
        -F|--firmwarebug)
            _smartctl_firmwarebug
            return 0
            ;;
        -P|--presets)
            _smartctl_presets
            return 0
            ;;
        -t|--test)
            _smartctl_test
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '--help --version --info --all --quietmode \
            --device --tolerance --badsum --report --nocheck --smart \
            --offlineauto --saveauto --health --capabilities --attributes \
            --log --vendorattribute --firmwarebug --presets --test --captive \
            --abort' -- "$cur" ) )
    else
        cur=${cur:=/dev/}
        _filedir
    fi
}
complete -F _smartctl smartctl
}

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
