# clang-uml completion                               -*- shell-script -*-

##
## packaging/autocomplete/clang-uml.bash-completion
##
## Copyright (c) 2021-2023 Bartek Kryza <bkryza@gmail.com>
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
##     http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##

#
# Check if this is OSX, if so defined custom init_completion
#
if [[ `uname` =~ "Darwin" ]]; then
  __osx_init_completion()
  {
      COMPREPLY=()
      _get_comp_words_by_ref cur prev words cword
  }
fi

declare -a generators
generators=(
"plantuml"
"json"
"mermaid"
)

_clanguml() {
  local cur
  local prev
  local words
  local cword

  #
  # Check if the _init_completion function is available, which is
  # available since bash-completion 1.4
  #
  if [[ `uname` =~ "Darwin" ]]; then
    __osx_init_completion || return
  else
    _init_completion -s || return
  fi


  case $prev in
    -d|--compile-database)
      _filedir -d
      return
      ;;
    -o|--output-directory)
      _filedir -d
      return
      ;;
    -n|--diagram-name)
      COMPREPLY=()
      local diagrams=`clang-uml -l | tail -n +2 | cut -c5- | awk '{ print $1 }'`

      COMPREPLY=( $(compgen -W "${diagrams}" -- $cur))
      return
      ;;
    --show-template)
      COMPREPLY=()
      local templates=`clang-uml --list-templates | tail -n +2 | cut -c5- | awk '{ print $1 }'`

      COMPREPLY=( $(compgen -W "${templates}" -- $cur))
      return
      ;;
    -g|--generator)
      local generators_list=`echo "${generators[@]}"`
      COMPREPLY=($(compgen -o nospace -W "${generators_list[@]}" -- "$cur"))
      return
      ;;
  esac

  case $cur in
    -*)
    COMPREPLY=( $( compgen -W '-h --help \
                               -V --version \
                               -c --config \
                               -t --thread-count \
                               -v --verbose \
                               -p --progress \
                               -q --quiet \
                               -l --list-diagrams \
                               -r --render_diagrams \
                               --init \
                               --add-compile-flag \
                               --remove-compile-flag \
                               --query-driver \
                               --add-class-diagram \
                               --add-sequence-diagram \
                               --add-package-diagram \
                               --add-include-diagram \
                               --add-diagram-from-template \
                               --template-var \
                               --list-templates \
                               --show-template \
                               --dump-config \
                               --paths-relative-to-pwd \
                               --no-metadata \
                               --print-from \
                               --print-to \
                               --no-validate \
                               --validate-only \
                               --plantuml-cmd \
                               --mermaid-cmd' -- $cur ) )
    return
    ;;
  esac

  #
  # By default do nothing
  #
  return 0

} &&
complete -F _clanguml clang-uml
