#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

findCommittingFiles() {
  declare -a committingFiles=($(git diff --staged --name-only | cat))
  local pathPattern=$1

  for file in "${committingFiles[@]}"
  do
    echo ${file}
  done | grep ${pathPattern}
}

findCommittingDrafts() {
  findCommittingFiles '_drafts/'
}

findCommittingPosts() {
  findCommittingFiles '_posts/'
}

findCommittingImages() {
  findCommittingFiles '_images/'
}

generatePostsJsonIfAnyPostChanged() {
  if [[ $(findCommittingPosts) ]]; then
    echo "Updating api/posts.json..."
    node scripts/generate-posts.js
    git add api/posts.json
  fi
}

isTechnicalCommit() {
  declare -a committingFiles=($(git diff --staged --name-only | cat))
  for file in "${committingFiles[@]}"
  do
    ## exclude pure markdown file editing, e.g., TODOLIST.md, README.md
    if [[ ! ${file} =~ "_posts/" ]] && [[ ! ${file} =~ "_drafts/" ]] && [[ ! ${file} =~ "_images/" ]] && [[ ! ${file} =~ ".md" ]]; then
      return 0
    fi
  done

  return 1
}

abortWhenSanityCheckFailsForTechnicalCommits() {
  if isTechnicalCommit; then
    npm run sanity
  fi
}

minifyImagesIfAny() {
  declare -a committingImages=($(findCommittingImages))
  for imagePath in "${committingImages[@]}"
  do
    npm run minify:images -- $imagePath
    git add $imagePath ## overrides original image
  done
}

abortWhenSanityCheckFailsForTechnicalCommits
minifyImagesIfAny
generatePostsJsonIfAnyPostChanged
