#!/usr/bin/env bash
# shellcheck disable=SC1090,SC1091

# Prefer US English
export LANG="en_US"

# Detect support for advanced terminal features
if [ "$0" = 'bash' ] || [ "$0" = '/bin/bash' ]; then
  export BASH_SUPPORT=true
fi

### Import Common Settings
if [ -f "$HOME/.config/shell/profile.sh" ]; then
  . "$HOME/.config/shell/profile.sh"
fi

### Fig / LC_ALL
if [ "$BASH_SUPPORT" = 'true' ]; then
  if [[ "$(hostname)" != *'-minimal' ]]; then
    export LC_ALL="en_US.UTF-8"
  fi
  if [ -f "$HOME/.fig/shell/bashrc.pre.bash" ]; then
    . "$HOME/.fig/shell/bashrc.pre.bash"
  fi
fi

### Settings
if command -v shopt > /dev/null; then
  shopt -s globstar
  shopt -s histappend
  shopt -s checkwinsize
fi

### History
export HISTFILE="$XDG_STATE_HOME/bash/history"

### /etc/bashrc
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# Prompt (on bash only)
if [ "$BASH_SUPPORT" = 'true' ]; then
  if [[ "$(hostname)" != *'-minimal' ]]; then
    ### Styled Terminal
    export BASH_IT="$HOME/.local/bash_it"
    export BASH_IT_THEME=modern
    if [ -f "$BASH_IT/bash_it.sh" ]; then
      . "$BASH_IT/bash_it.sh"
    elif command -v oh-my-posh > /dev/null; then
      # Oh My Posh (See: https://ohmyposh.dev/)
      eval "$(oh-my-posh init bash --config "$XDG_CONFIG_HOME/oh-my-posh/Betelgeuse.omp.json")"
    else
      # Basic styled terminal
      case "$TERM" in
      xterm* | rxvt* | Eterm | aterm | kterm | gnome* | alacritty)
        PS1="\n \[\033[0;34m\]╭─\[\033[0;31m\]\[\033[0;37m\]\[\033[41m\] $OS_ICON \u \[\033[0m\]\[\033[0;31m\]\[\033[44m\]\[\033[0;34m\]\[\033[44m\]\[\033[0;30m\]\[\033[44m\] \w \[\033[0m\]\[\033[0;34m\] \n \[\033[0;34m\]╰ \[\033[1;36m\]\$ \[\033[0m\]"
        ;;
      esac
    fi
  else
    # Minimal session
    if command -v oh-my-posh > /dev/null; then
      eval "$(oh-my-posh init bash --config "$XDG_CONFIG_HOME/oh-my-posh/Betelgeuse-minimal.omp.json")"
    fi
  fi
fi

### Bash Initialization Hooks
if [ "$BASH_SUPPORT" = 'true' ]; then
  ### Bash Completion
  if [ -f "/usr/local/etc/profile.d/bash_completion.sh" ]; then
    . "/usr/local/etc/profile.d/bash_completion.sh"
  fi

  ### direnv
  if command -v direnv > /dev/null; then
    eval "$(direnv hook bash)"
  fi

  ### Java (asdf)
  if [ -f "$ASDF_DATA_DIR/plugins/java/set-java-home.bash" ]; then
    . "$ASDF_DATA_DIR/plugins/java/set-java-home.bash"
  fi

  ### zoxide
  if command -v zoxide > /dev/null; then
    eval "$(zoxide init --cmd cd bash)"
  fi

  ### Fig
  if [ -f "$HOME/.fig/shell/bashrc.post.bash" ]; then
    . "$HOME/.fig/shell/bashrc.post.bash"
  fi

  ### Vault
  if command -v vault > /dev/null; then
    complete -C vault vault
  fi
fi
