#!/usr/bin/env bash

if array_is_nonempty extension_args
then
  target_path="${extensions_development_path:-"$initial_pwd"}"

  for extension in ${extension_args[@]}
  do
    if path_exists "${target_path}/${extension}"
    then
      error "Extension '${extension}' already exists "\
        "at ${target_path}/${extension}."
    else
      if path_exists "${bdsm_path}/extensions/builtin/bdsm/templates/ext/${language:-shell}"
      then
        enter "${bdsm_path}/extensions/builtin/bdsm/templates/ext/${language:-shell}"

        _path="${target_path}/${extension}"

        copy_paths actions modules templates config \
          to "${_path}"

        copy_files README.md VERSION CHANGELOG.md TODO.md \
          to "${_path}"

        for _module in "${extension_modules[@]}"
        do
          extension_module_add "${extension}" "${_module}" "${_path}"

          # Run the module's extension setup function, if it exists.
          if file_exists "${bdsm_path}/extensions/builtin/core/modules/shell/${_module}/extensions"
          then
            source_files "${bdsm_path}/extensions/builtin/core/modules/shell/${_module}/extensions"
            if command_exists "${_module}_extension_setup"
            then
              "${_module}_extension_setup" "${extension}" "${_module}" "${_path}"
              #unset -f "${_module}_extension_setup"
            fi
          fi
        done
        log "Extension created from template at ${target_path}/${extension}/"
      else
        fail "Extension template files for are missing from "\
          "$target_path/core/templates/ext/${language:-shell}."
      fi
    fi
  done
  succeed "Created extensions ${extension_args[@]}"
else
  fail "At least one extension name must be specified."
fi
