#compdef serenity serenity.sh

_serenity() {
    local args
    args=(
        '1:command:->commands'
        '2:target:->targets'
        '*:: :->args'
    )

    local commands
    commands=(
        'build'
        'install'
        'image'
        'copy-src'
        'run'
        'gdb'
        'test'
        'delete'
        'recreate'
        'rebuild'
        'kaddr2line'
        'addr2line'
        'rebuild-toolchain'
        'rebuild-world'
    )

    local targets
    targets=(
        'i686:Target i686 (default)'
        'x86_64:Target x86_64'
        'aarch64:Target aarch64'
        'lagom:Target host machine'
    )

    _arguments -C -S "$args[@]"

    local command
    command="$line[1]"

    local target
    target="$line[2]"

    case "$state" in
        commands)
            _describe 'command' commands
            ;;
        targets)
            case "$command" in
                install|image|copy-src|kaddr2line|rebuild-toolchain|rebuild-world)
                    # lagom target is not supported for these, remove from targets
                    targets[$targets[(i)lagom]]=()
                    ;;
            esac
            _describe 'target' targets
            ;;
        args)
            ;;
    esac

    return 0
}

_serenity
