#!/bin/sh -e

HEADER="$(cat "$PWD/.ci/license/header.txt")"

echo "Getting branch changes"

BRANCH=`git rev-parse --abbrev-ref HEAD`
COMMITS=`git log ${BRANCH} --not master --pretty=format:"%h"`
RANGE="${COMMITS[${#COMMITS[@]}-1]}^..${COMMITS[0]}"
FILES=`git diff-tree --no-commit-id --name-only ${RANGE} -r`

#FILES=$(git diff --name-only master)

echo "Done"

for file in $FILES; do
    EXTENSION="${file##*.}"
    case "$EXTENSION" in
        kts|kt|cpp|h)
            CONTENT="`cat $file`"
            case "$CONTENT" in
                "$HEADER"*) ;;
                *) BAD_FILES="$BAD_FILES $file" ;;
            esac
            ;;
    esac
done

if [ "$BAD_FILES" = "" ]; then
    echo
    echo "All good."

    exit
fi

echo "The following files have incorrect license headers:"
echo

for file in $BAD_FILES; do echo $file; done

cat << EOF

The following license header should be added to the start of all offending files:

=== BEGIN ===
$HEADER
===  END  ===

If some of the code in this PR is not being contributed by the original author,
the files which have been exclusively changed by that code can be ignored.
If this happens, this PR requirement can be bypassed once all other files are addressed.
EOF

if [ "$FIX" = "true" ]; then
    echo
    echo "FIX set to true. Fixing headers."
    echo

    for file in $BAD_FILES; do
        cat $file > $file.bak

        cat .ci/license/header.txt > $file
        echo >> $file
        cat $file.bak >> $file

        rm $file.bak

        git add $file
    done

    echo "License headers fixed."

    if [ "$COMMIT" = "true" ]; then
        echo
        echo "COMMIT set to true. Committing changes."
        echo

        git commit -m "Fix license headers"

        echo "Changes committed. You may now push."
    fi
else
    exit 1
fi
