# wl-mirror(1) completion                                  -*- shell-script -*-

_comp_cmd_wl-mirror_output() {
    if [[ "$XDG_CURRENT_DESKTOP" == "sway" ]]; then
        local OUTPUTS=( $(swaymsg -t get_outputs | sed -n '/^[[:space:]]*"name":/s/^.*"\([^"]*\)",/\1/p') )
        _comp_compgen -- -W '"${OUTPUTS}"'
    fi
}

_comp_cmd_wl-mirror_scaling() {
    _comp_compgen -- -W 'fit cover exact linear nearest'
}

_comp_cmd_wl-mirror_backend() {
    _comp_compgen -- -W 'auto export-dmabuf screencopy screencopy-dmabuf screencopy-shm extcopy extcopy-dmabuf extcopy-shm'
}

_comp_cmd_wl-mirror_transform() {
    _comp_compgen -- -W 'normal flipX flipY 0cw 90cw 180cw 270cw 0ccw 90ccw 180ccw 270ccw flipped 0 90 180 270'
}

_comp_cmd_wl-mirror_region() {
    # can't complete regions currently
    return
}

_comp_cmd_wl-mirror_title() {
    # can't complete title format currently
    return
}

_comp_cmd_wl-mirror() {
    local cur prev words cword comp_args
    _comp_initialize -- "$@" || return

    local OPTS=(
        -h --help
        -V --version
        -v --verbose --no-verbose
        -c --show-cursor --no-show-cursor
        -i --invert-colors --no-invert-colors
        -f --freeze --unfreeze --toggle-freeze
        -F --fullscreen --no-fullscreen
        --fullscreen-output --no-fullscreen-output
        -s --scaling
        -b --backend
        -t --transform
        -r --region --no-region
        -S --stream
        --title
    )
    local ARG_OPTS=(
        --fullscreen-output
        -s --scaling
        -b --backend
        -t --transform
        -r --region
        --title
    )

    # TODO: ensure options aren't completed after positional arg
    # TODO: ensure positional arg is only completed once
    case $prev in
        --fullscreen-output) _comp_cmd_wl-mirror_output; return;;
        --s | --scaling) _comp_cmd_wl-mirror_scaling; return;;
        -b | --backend) _comp_cmd_wl-mirror_backend; return;;
        -t | --transform) _comp_cmd_wl-mirror_transform; return;;
        -r | --region) _comp_cmd_wl-mirror_region; return;;
        --title) _comp_cmd_wl-mirror_title; return;;
    esac

    if [[ $cur == -* ]]; then
        _comp_compgen -- -W '"${OPTS[@]}"'
    else
        _comp_cmd_wl-mirror_output; return
    fi
} &&
    complete -F _comp_cmd_wl-mirror wl-mirror

# ex: filetype=sh
