# This is the default theme for gitprompt.sh

unset_git_prompt_colors() {
  unset Time12a
  unset PathShort
  unset GIT_PROMPT_PREFIX
  unset GIT_PROMPT_SUFFIX
  unset GIT_PROMPT_SEPARATOR
  unset GIT_PROMPT_BRANCH
  unset GIT_PROMPT_DETACHED_HEAD
  unset GIT_PROMPT_STAGED
  unset GIT_PROMPT_CONFLICTS
  unset GIT_PROMPT_CHANGED
  unset GIT_PROMPT_REMOTE
  unset GIT_PROMPT_UNTRACKED
  unset GIT_PROMPT_STASHED
  unset GIT_PROMPT_CLEAN
  unset GIT_PROMPT_COMMAND_OK
  unset GIT_PROMPT_COMMAND_FAIL
  unset GIT_PROMPT_VIRTUALENV
  unset GIT_PROMPT_UPSTREAM
  unset GIT_PROMPT_START_USER
  unset GIT_PROMPT_START_ROOT
  unset GIT_PROMPT_END_USER
  unset GIT_PROMPT_END_ROOT
  unset GIT_PROMPT_SYMBOLS_AHEAD
  unset GIT_PROMPT_SYMBOLS_BEHIND
  unset GIT_PROMPT_SYMBOLS_PREHASH
  unset GIT_PROMPT_SYMBOLS_PRETAG
  unset GIT_PROMPT_SYMBOLS_NO_REMOTE_TRACKING
}

define_helpers() {
  Time12a="\$(date +%H:%M)"
  PathShort="\w";
  NewLine="\n"

  if [ -n "$ZSH_VERSION" ]; then
    Time12a="%T"
    PathShort="%~"
    NewLine=$'\n'
  fi
}

define_undefined_git_prompt_colors() {
  if [ -z ${GIT_PROMPT_THEME_NAME:+x} ]; then GIT_PROMPT_THEME_NAME="default"; fi

  # These are the color definitions used by gitprompt.sh
  if [ -z "${GIT_PROMPT_PREFIX+x}" ]; then GIT_PROMPT_PREFIX="["; fi                 # start of the git info string
  if [ -z "${GIT_PROMPT_SUFFIX+x}" ]; then GIT_PROMPT_SUFFIX="]"; fi                 # the end of the git info string
  if [ -z "${GIT_PROMPT_SEPARATOR+x}" ]; then GIT_PROMPT_SEPARATOR="|"; fi              # separates each item

  if [ -z "${GIT_PROMPT_BRANCH+x}" ]; then GIT_PROMPT_BRANCH="${Magenta}"; fi        # the git branch that is active in the current directory
  if [ -z "${GIT_PROMPT_MASTER_BRANCH+x}" ]; then GIT_PROMPT_MASTER_BRANCH="${GIT_PROMPT_BRANCH}"; fi  # used if the git branch that is active in the current directory is $GIT_PROMPT_MASTER_BRANCHES
  if [ -z "${GIT_PROMPT_DETACHED_HEAD+x}" ]; then GIT_PROMPT_DETACHED_HEAD="${GIT_PROMPT_BRANCH}"; fi  # used if the repo is in a detached head state
  if [ -z "${GIT_PROMPT_STAGED+x}" ]; then GIT_PROMPT_STAGED="${Red} ●"; fi           # the number of staged files/directories
  if [ -z "${GIT_PROMPT_CONFLICTS+x}" ]; then GIT_PROMPT_CONFLICTS="${Red}✖ "; fi       # the number of files in conflict
  if [ -z "${GIT_PROMPT_CHANGED+x}" ]; then GIT_PROMPT_CHANGED="${Blue} ✚"; fi        # the number of changed files

  if [ -z "${GIT_PROMPT_REMOTE+x}" ]; then GIT_PROMPT_REMOTE=" "; fi                 # the remote branch name (if any) and the symbols for ahead and behind
  if [ -z "${GIT_PROMPT_UNTRACKED+x}" ]; then GIT_PROMPT_UNTRACKED="${Cyan} …"; fi       # the number of untracked files/dirs
  if [ -z "${GIT_PROMPT_STASHED+x}" ]; then GIT_PROMPT_STASHED="${BoldGreen} ⚑"; fi    # the number of stashed files/dir
  if [ -z "${GIT_PROMPT_CLEAN+x}" ]; then GIT_PROMPT_CLEAN="${BoldGreen}✔"; fi      # a colored flag indicating a "clean" repo

  # For the command indicator, the placeholder _LAST_COMMAND_STATE_
  # will be replaced with the exit code of the last command
  # e.g.
  # GIT_PROMPT_COMMAND_OK="${Green}✔-_LAST_COMMAND_STATE_ "    # indicator if the last command returned with an exit code of 0
  # GIT_PROMPT_COMMAND_FAIL="${Red}✘-_LAST_COMMAND_STATE_ "    # indicator if the last command returned with an exit code of other than 0

  if [ -z "${GIT_PROMPT_COMMAND_OK+x}" ]; then GIT_PROMPT_COMMAND_OK="${Green}✔"; fi    # indicator if the last command returned with an exit code of 0
  if [ -z "${GIT_PROMPT_COMMAND_FAIL+x}" ]; then GIT_PROMPT_COMMAND_FAIL="${Red}✘-_LAST_COMMAND_STATE_"; fi    # indicator if the last command returned with an exit code of other than 0

  # Possible to change which command is used to create git status information
  # There are three options:
  # 1) gitstatus.sh (uses git status --branch --porcelain - fast, requires git > 1.7.10)
  # 2) gitstatus_pre-1.7.10.sh (Uses a variety of git commands and pipes - slower, works with older git clients)
  # 3) gitstatus.py (Unsupported, lack features found in the bash versions)
  if [ -z "${GIT_PROMPT_STATUS_COMMAND+x}" ]; then GIT_PROMPT_STATUS_COMMAND="gitstatus.sh"; fi    # Point out the command to get the git status from

  # template for displaying the current virtual environment
  # use the placeholder _VIRTUALENV_ will be replaced with
  # the name of the current virtual environment (currently CONDA and VIRTUAL_ENV)
  if [ -z "${GIT_PROMPT_VIRTUALENV+x}" ]; then GIT_PROMPT_VIRTUALENV="(${Blue}_VIRTUALENV_${ResetColor}) "; fi

  # template for displaying the current remote tracking branch
  # use the placeholder _UPSTREAM_ will be replaced with
  # the name of the current remote tracking branch
  if [ -z "${GIT_PROMPT_UPSTREAM+x}" ]; then GIT_PROMPT_UPSTREAM=" {${Blue}_UPSTREAM_${ResetColor}}"; fi

  # _LAST_COMMAND_INDICATOR_ will be replaced by the appropriate GIT_PROMPT_COMMAND_OK OR GIT_PROMPT_COMMAND_FAIL
  if [ -z "${GIT_PROMPT_START_USER+x}" ]; then GIT_PROMPT_START_USER="_LAST_COMMAND_INDICATOR_ ${Yellow}${PathShort}${ResetColor}"; fi
  if [ -z "${GIT_PROMPT_START_ROOT+x}" ]; then GIT_PROMPT_START_ROOT="_LAST_COMMAND_INDICATOR_ ${Yellow}${PathShort}${ResetColor}"; fi
  if [ -z "${GIT_PROMPT_END_USER+x}" ]; then GIT_PROMPT_END_USER=" $ "; fi
  if [ -z "${GIT_PROMPT_END_ROOT+x}" ]; then GIT_PROMPT_END_ROOT=" # "; fi

  # Please do not add colors to these symbols
  if [ -z ${GIT_PROMPT_SYMBOLS_AHEAD+x} ]; then GIT_PROMPT_SYMBOLS_AHEAD="↑·"; fi             # The symbol for "n versions ahead of origin"
  if [ -z ${GIT_PROMPT_SYMBOLS_BEHIND+x} ]; then GIT_PROMPT_SYMBOLS_BEHIND="↓·"; fi            # The symbol for "n versions behind of origin"
  if [ -z ${GIT_PROMPT_SYMBOLS_PREHASH+x} ]; then GIT_PROMPT_SYMBOLS_PREHASH=":"; fi            # Written before hash of commit, if no name could be found
  if [ -z ${GIT_PROMPT_SYMBOLS_PRETAG+x} ]; then GIT_PROMPT_SYMBOLS_PRETAG=""; fi            # Written before tag name
  if [ -z ${GIT_PROMPT_SYMBOLS_NO_REMOTE_TRACKING+x} ]; then GIT_PROMPT_SYMBOLS_NO_REMOTE_TRACKING="L"; fi # This symbol is written after the branch, if the branch is not tracked

  # branch name(s) that will use $GIT_PROMPT_MASTER_BRANCH color
  # To specify multiple branches, use
  #   shopt -s extglob
  #   GIT_PROMPT_MASTER_BRANCHES='@(master|production)'
  if [ -z ${GIT_PROMPT_MASTER_BRANCHES+x} ]; then GIT_PROMPT_MASTER_BRANCHES="master"; fi
}

# call only from theme file
reload_git_prompt_colors() {
  if [[ "${GIT_PROMPT_THEME_NAME-}" != "${1}" ]]; then
    unset_git_prompt_colors
    define_helpers
    override_git_prompt_colors
    define_undefined_git_prompt_colors
  fi
}

if [[ "${GIT_PROMPT_THEME-}" == "default" && "${GIT_PROMPT_THEME_NAME-}" != "default" ]]; then
  define_helpers
  define_undefined_git_prompt_colors
fi