#! /usr/bin/env bash

usage() {
    cat <<EOF
git st:
    Colorful, compact git status

USAGE
    git st

DESCRIPTION
    One-line status for each file with lines added and removed.

    This version written by https://github.com/PlatyPew/,
    original version by https://www.reddit.com/user/ex1c)

EOF
}

while getopts ":h" opt; do
  case $opt in
    h)
      usage ; exit ; ;;
  esac
done

IFS=
status="$(git -c color.status=always status -sb)"

if [ $? -ne 0 ]; then
    exit 1
fi

diff="$(git diff --color --stat HEAD 2> /dev/null \
 | sed '$d; s/^ //' \
 | cut -d '|' -f 2)"

IFS=$'\n' status=($status)
IFS=$'\n' diff=($diff)

len=-1
for i in $(seq 1 $(( ${#status[@]} - 1))); do
    if [ ${#status[i]} -gt $len ]
    then
        len=${#status[i]}
    fi
done
(( len *= -1 ))

for i in $(seq 0 $(( ${#status[@]} - 1))) ; do
    currStatus=${status[i]}
    if [ $i -eq 0 ]; then
        echo "${status[0]}" | cut -d ' ' -f 2-
    else
        if [ ! -z ${diff[i - 1]} ]; then
            currDiff="|${diff[i - 1]}"
        else
            currDiff=""
        fi
        printf "%*s  %s\n" $len "${currStatus}" "${currDiff}"
    fi
done

if [ $(( ${#status[@]} - 1)) -eq 0 ]; then
    printf "\033[93mNothing to commit, working tree clean\033[0m\n"
fi
