#!/bin/sh

# pre-commit hook for Sketch files Git tracking

# Set UTF-8 encoding
export LANG=UTF-8
# Needed to work in SourceTree
export PATH=/usr/local/bin:$PATH

# Git repository absolute path
git_root=`git rev-parse --show-toplevel`
# Unzipped Sketch files path
unzipped_root="$git_root/_unzipped"
# Untouched Sketch files path
untouched_root="$git_root/_untouched"

# Array of all staged files
git_diff=`git diff --name-only --cached | grep ".sketch$"`

# Check if any Sketch file is staged
if [[ ${git_diff[0]} == '' ]]
then
  echo "No Sketch file staged."
else
  while read staged_sketch
  do

    # Absolute Sketch file path
    sketch="$git_root/$staged_sketch"
    # Unzipped Sketch file directory path
    unzipped_directory="$unzipped_root/$staged_sketch"
    # Untouched Sketch file path
    untouched_sketch="$untouched_root/$staged_sketch"
    # Untouched Sketch file directory path
    untouched_directory=`dirname "$untouched_sketch"`

    echo "Processing '`basename $sketch`'."

    # Delete existing directory
    rm -rf "$unzipped_directory"

    # If Sketch file wasn't deleted
    if ! git diff --summary --cached -- $staged_sketch | grep "delete" 2>&1 > /dev/null
    then

      # Copy untouched Sketch file to untouched folder
      if mkdir -p "$untouched_directory"
      then
        if cp "$sketch" "$untouched_sketch"
        then
          echo "  Untouched '`basename $sketch`' backed up."
        else
          echo "  Couldn't copy untouched '`basename $sketch`'."
          exit 1
        fi
      else
        echo "  Couldn't create '$untouched_root' directory."
        exit 1
      fi
      # Stage untouched file
      git add "$untouched_sketch"

      # Create directory
      if mkdir -p "$unzipped_directory"
      then
        if cd "$unzipped_directory"
        then
          # Unzip Sketch file
          if unzip -q "$sketch"
          then
            echo "  '`basename $sketch`' unzipped."
            # Prettify all JSON files
            for json_file in $(find . -name "*.json")
            do
              if python3 -m json.tool "$json_file" "$json_file".pretty
              then
                if mv "$json_file".pretty "$json_file"
                then
                  echo "  '$json_file' prettified."
                else
                  echo "  Couldn't move prettified '$json_file'."
                  rm -rf "$unzipped_directory"
                  exit 1
                fi
              else
                echo "  Couldn't prettify '$json_file'."
                rm -rf "$unzipped_directory"
                exit 1
              fi
            done
          else
            echo "  Couldn't unzip '`basename $sketch`'."
            rm -rf "$unzipped_directory"
            exit 1
          fi
          cd "$git_root"
        else
          echo "  Couldn't change directory to '$unzipped_directory'."
          exit 1
        fi
      else
        echo "  Couldn't create directory '$unzipped_directory'."
        exit 1
      fi
    else
      rm "$sketch"
      rm -rf "$untouched_sketch"
      echo "  '`basename $sketch`' was removed with all unzipped and untouched data."
    fi
    git add "$unzipped_directory/*"

    # Unstage working Sketch file
    git rm --cached "$sketch"

  done <<< "$git_diff"
fi