#!/usr/bin/env bash

fileToReindent=$1
[ -f "$fileToReindent" ] || { echo "File '$fileToReindent' not found."; exit 1; }
indentCharacter='\t'


countOccurrencesOfNeedleInHaystack() {
	local needle=$1
	local haystack=$2
	echo "$haystack" | grep -o "$needle" | wc -l
	}


makeIndentString() {
	local indentCharacter=$1
	local indentLevel=$2
	python -c "print('$indentCharacter' * $indentLevel)"
	}


# delete all existing indents
sed -ri 's/^ *(.*)$/\1/' "$fileToReindent"


# indent lines
indentLevelOfCurrentLine=0
indentLevelOfNextLine=0


while read line; do
	for character in '(' '\[' '{'; do
		nb=$(countOccurrencesOfNeedleInHaystack "$character" "$line")
		indentLevelOfNextLine=$((indentLevelOfNextLine+nb))
	done
	for character in ')' ']' '}'; do
		nb=$(countOccurrencesOfNeedleInHaystack "$character" "$line")
		indentLevelOfNextLine=$((indentLevelOfNextLine-nb))
	done
	indentString=$(makeIndentString "$indentCharacter" "$indentLevelOfCurrentLine")
	indentLevelOfCurrentLine=$indentLevelOfNextLine
	echo "$indentString$line"
done < "$fileToReindent"
