
source $SCRIPT_DIR/../modules/completion

function _sudo($ctx : Module, $t : [String], $c : Int) : Candidates? {
    for(var i = 1; $i < $t.size(); $i++) {
        var v = $t[$i]
        case $v {
        $/^-.*$/ => continue
        else => if $i < $t.size() - 1 || $c == $t.size() {
                    return {
                        importenv PATH : ""
                        PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin $compDelegate($ctx, $t.slice($i), $c - $i)
                    }
                }
        }
    }
    if $c < $t.size() && $t.peek() == '-' {
        return new Candidates().add('-A').add('-b').add('-E').add('-H').add('-n').add('-P').add('-S')
    }

    var opt = ['-A', 'external']
    var prefix = $c < $t.size() ? $t.peek() : ""
    if $prefix.contains('/') {
        $opt.add('-A').add('exec')
    }
    if $prefix.startsWith('~') {
        $opt.add('-A').add('tilde')
    }

    importenv PATH : ""
    PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin complete -q $opt $prefix
    return $COMPREPLY
}

$compAdd("sudo", $_sudo)