# Completion de Bash para 'sipi', 'sipi-cli' y 'sipi-editor'.
# Instalar en /usr/share/bash-completion/completions/sipi (bash-completion
# lo carga solo, sin necesidad de "source" manual en .bashrc).

_sipi_completar_archivos_sipi() {
    local cur="$1"
    COMPREPLY=($(compgen -f -X '!*.sipi' -- "$cur"))
    # tambien ofrecer directorios, para poder seguir navegando con Tab
    COMPREPLY+=($(compgen -d -- "$cur"))
}

_sipi() {
    local cur prev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    local banderas="--repl --formatear --corregir --revisar --sin-cache --depurar --help --ayuda -h"

    case "$prev" in
        --formatear|--corregir|--revisar)
            _sipi_completar_archivos_sipi "$cur"
            return 0
            ;;
    esac

    if [[ "$cur" == -* ]]; then
        COMPREPLY=($(compgen -W "$banderas" -- "$cur"))
        return 0
    fi

    _sipi_completar_archivos_sipi "$cur"
}

_sipi_editor() {
    local cur
    cur="${COMP_WORDS[COMP_CWORD]}"
    _sipi_completar_archivos_sipi "$cur"
}

_sipi_cli() {
    local cur prev
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    local subcomandos="nuevo test compilar publicar ayuda"
    if [[ $COMP_CWORD -eq 1 ]]; then
        COMPREPLY=($(compgen -W "$subcomandos" -- "$cur"))
    fi
}

complete -F _sipi sipi
complete -F _sipi_editor sipi-editor
complete -F _sipi_cli sipi-cli
# sipi-kids, sipi-dev y sipi-ia comparten el mismo comportamiento que
# sipi-editor: abren directo con un .sipi opcional como argumento.
complete -F _sipi_editor sipi-kids
complete -F _sipi_editor sipi-dev
complete -F _sipi_editor sipi-ia
# sipi-lsp y sipi-ia-servidor no toman un archivo .sipi como argumento
# (el primero habla LSP por stdio, el segundo levanta un servidor HTTP)
# asi que no se les registra completion de archivos.

