# Update dotfiles
udot() {
  cwd=$(pwd)
  cd ~/.dotfiles/
  info=$(git --no-pager log --pretty="%h by %an <%ae> on %cd" -1 --abbrev-commit)
  local=$(git --no-pager log --pretty="%H" -1)
  remote=$(git ls-remote origin | awk "/HEAD/ {print \$1}")
  gstatus=$(git status --porcelain)

  echo -e '  ____         ___   _____    _____           _     U _____ u ____   '
  echo -e ' |  _ \      \/ _ \ |_ " _|  |" ___|  ___    |"|    \| ___"| / __"|  '
  echo -e ' | | | |     | | | |  | |   U| |_  u |_"_| U | |     |  _|" <\___ \  '
  echo -e ' | |_| |\.-,_| |_| | /| |\  \|  _|/   | |   \| |/__  | |___  u___) | '
  echo -e ' |____/ u \_)-\___/ u |_| u  |_|    u/| |\u    |_____| |_____| |____/  '
  echo -e '  |||_         \\    _// \\\\_  ) (   \\,-.-,_   //  \\\\     )(    (__)   '
  echo -e ' (__)_)       (__) (__) (__) (_)    (_/ \_) (_/   (__) (__) (_/  \_) '
  echo -e ''
  echo -e "$info"
  echo -e ""

  if [ -z "$status" ]; then
    echo -e "Local changes:"
    echo -e "$gstatus"
    echo -e ""
  fi

  if [ "$local" = "$remote" ]; then
    echo "Already up to date :)"
  else
    echo -e "Updating..."  
    git pull
    bin/dfm install 
    source ~/.dotfiles/aliases 
    source ~/.dotfiles/functions
    cd $cwd
  fi
  echo -e ""
  echo -e "Update submodules..."
  git submodule init
  git submodule update
  echo -e ""
  tmux source-file ~/.tmux.conf > /dev/null 2>&1
}

# will attach to existing tmux session, create new if one does not exist or just start bash if there is no tmux available.
function ssht(){
  ssh $* -t 'tmux a || tmux || /bin/bash'
}

#Docker: bash into running Docker container
dockersh() {
    docker cp ~/.dotfiles/docker.bashrc $1:/.docker.bashrc
    docker cp ~/.dotfiles/aliases $1:/.docker.aliases
    docker cp ~/.dotfiles/functions $1:/.docker.functions

    docker exec -it $1 bash --rcfile /.docker.bashrc
}

#Docker: Show Docker container logging
dockerlog() {
    docker logs -f $1
}

#Docker: run docker security check
dockersecure() {
   docker run -it --net host --pid host --cap-add audit_control -v /var/lib:/var/lib -v /var/run/docker.sock:/var/run/docker.sock -v /usr/lib/systemd:/usr/lib/systemd -v /etc:/etc --label docker_bench_security --rm docker/docker-bench-security
}

# wrk - a HTTP benchmarking tool - https://github.com/wg/wrk
function wrk() {
   docker run --rm williamyeh/wrk --latency $1
}

# Simple calculator
function calc() {
	local result="";
	result="$(printf "scale=10;$*\n" | bc --mathlib | tr -d '\\\n')";
	#                       └─ default (when `--mathlib` is used) is 20
	#
	if [[ "$result" == *.* ]]; then
		# improve the output for decimal numbers
		printf "$result" |
		sed -e 's/^\./0./'        `# add "0" for cases like ".5"` \
		    -e 's/^-\./-0./'      `# add "0" for cases like "-.5"`\
		    -e 's/0*$//;s/\.$//';  # remove trailing zeros
	else
		printf "$result";
	fi;
	printf "\n";
}

# Create a new directory and enter it
function mcd() {
	mkdir -p "$@" && cd "$_";
}

# Run `dig` and display the most useful info
function digga() {
	dig +nocmd "$1" any +multiline +noall +answer;
}

# Search in bash history
function his() {
	history | grep --color=auto -i "$1";
}

# Decompress just about any compressed file format
function extract {
 if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
 else
    if [ -f $1 ] ; then
        # NAME=${1%.*}
        # mkdir $NAME && cd $NAME
        case $1 in
          *.tar.bz2)   tar xvjf ../$1    ;;
          *.tar.gz)    tar xvzf ../$1    ;;
          *.tar.xz)    tar xvJf ../$1    ;;
          *.lzma)      unlzma ../$1      ;;
          *.bz2)       bunzip2 ../$1     ;;
          *.rar)       unrar x -ad ../$1 ;;
          *.gz)        gunzip ../$1      ;;
          *.tar)       tar xvf ../$1     ;;
          *.tbz2)      tar xvjf ../$1    ;;
          *.tgz)       tar xvzf ../$1    ;;
          *.zip)       unzip ../$1       ;;
          *.Z)         uncompress ../$1  ;;
          *.7z)        7z x ../$1        ;;
          *.xz)        unxz ../$1        ;;
          *.exe)       cabextract ../$1  ;;
          *)           echo "extract: '$1' - unknown archive method" ;;
        esac
    else
        echo "$1 - file does not exist"
    fi
fi
}
