#!/bin/sh

PROJECT=$(docker compose exec -T php php -r "echo dirname(dirname(dirname(realpath('$0'))));")
STAGED_FILES_CMD=$(git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\.php)
UNSTAGED_FILES_CMD=$(git diff --name-only --diff-filter=ACMR | grep \\.php)

# Determine if a file list is passed
if [ "$#" -eq 1 ]
then
    oIFS=$IFS
    IFS='
    '
    SFILES="$1"
    IFS=$oIFS
fi

SFILES=${SFILES:-$STAGED_FILES_CMD}

STAGED_BUT_MODIFIED_FILES=$(docker compose exec -T php php -r "\$sfiles=(explode(\"\\n\", '$SFILES'));\$usfiles=(explode(\"\\n\", '$UNSTAGED_FILES_CMD'));echo implode(\"\\n\",array_intersect(\$usfiles,\$sfiles));")

if [ -z "$STAGED_BUT_MODIFIED_FILES" ]; then
    echo "OK"
else
    echo "Files staged but then modified:\n"
    echo "${STAGED_BUT_MODIFIED_FILES}"
    exit 1
fi


echo "Checking PHP Lint..."
for FILE in $SFILES
do
    docker compose exec -T php php -l -d display_errors=0 $PROJECT/$FILE
    if [ $? != 0 ]
    then
        echo "Fix the error before commit."
        exit 1
    fi
    FILES="$FILES $PROJECT/$FILE"
done

if [ "$FILES" != "" ]
then
    echo "Running Code Sniffer."
    docker-compose exec -T php /app/vendor/bin/phpcs --standard=PSR12 $FILES

    if [ $? != 0 ]
    then
        echo "Fix the error before commit!"
        exit 1
    fi
fi

exit $?
