#!/usr/bin/env bash
#
# Created by vcernomschi on 15/07/2016
#

STAGED_JS_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".es6\|.js$")
STAGED_TS_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".ts$")
STAGED_PHP_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".php$")

if [[ "$STAGED_JS_FILES" = "" ]] && [[ "$STAGED_TS_FILES" = "" ]] && [[ "$STAGED_PHP_FILES" = "" ]]; then
  exit 0
fi

PASS=true

echo -e "\nValidating Javascript:\n"

for JS_FILE in $STAGED_JS_FILES
do
  eslint "$JS_FILE"

  if [[ "$?" == 0 ]]; then
    echo -e "\t\033[32mESLint Passed: $JS_FILE\033[0m"
  else
    echo -e "\t\033[41mESLint Failed: $JS_FILE\033[0m"
    PASS=false
  fi
done

echo -e "\nJavaScript validation complete\n"

echo -e "\nValidating Typescript:\n"

for TS_FILE in $STAGED_TS_FILES
do
  tslint "$TS_FILE"

  if [[ "$?" == 0 ]]; then
    echo -e "\t\033[32mESLint Passed: $TS_FILE\033[0m"
  else
    echo -e "\t\033[41mESLint Failed: $TS_FILE\033[0m"
    PASS=false
  fi
done

echo -e "\nTypeScript validation complete\n"

echo -e "\nValidating PHP:\n"

for PHP_FILE in $STAGED_PHP_FILES
do
  ./vendor/bin/phpcs --standard=Drupal "$PHP_FILE"

  if [[ "$?" == 0 ]]; then
    echo -e "\t\033[32mPHP code sniffer Passed: $PHP_FILE\033[0m"
  else
    echo -e "\t\033[41mPHP code sniffer Failed: $PHP_FILE\033[0m"
    PASS=false
  fi
done

echo -e "\PHP validation complete\n"

if ! $PASS; then
  echo -e "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass ESLint/TSLint/PHP code sniffer but do not. Please fix the ESLint/TSLint/PHP errors and try again.\n"
  exit 1
else
  echo -e "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi

exit $?