#!/usr/bin/env bash
# SPDX-License-Identifier: MIT

# This script is executed by GitHub Actions for every successful push (on any branch, PR or not).
set -ex

function initialize {
  if [[ -z $TLDRHOME ]]; then
    export TLDRHOME=${GITHUB_WORKSPACE:-$(pwd)}
  fi

  if [[ -z $TLDR_LANG_ARCHIVES_DIRECTORY ]]; then
    export TLDR_LANG_ARCHIVES_DIRECTORY="${GITHUB_WORKSPACE:-$(pwd)}/language_archives"
  fi

  export TLDR_ARCHIVE="tldr.zip"
  DIFF="$(git diff --name-only @^ @ | cut -d'/' -f1)"
  export DIFF
}

function build_index {
  if ! grep -xq "pages.*" <<< "$DIFF"; then
    return
  fi

  npm run build-index
  echo "Pages index successfully built."
}

function build_archive {
  if ! grep -xq "pages.*" <<< "$DIFF"; then
    return
  fi

  rm -f "$TLDR_ARCHIVE"
  cd "$TLDRHOME/"
  zip -q -r "$TLDR_ARCHIVE" pages* LICENSE.md index.json
  echo "Pages archive successfully built."
}

function build_translation_archives {
  local source_directory target_directory lang archive_name
  source_directory="$TLDRHOME"
  target_directory="$TLDR_LANG_ARCHIVES_DIRECTORY"
  mkdir -p "$target_directory"
  rm -f "$target_directory"/*

  for lang_dir in "$source_directory"/pages*; do
    lang=$(basename "$lang_dir")
    # Skip symlinks (pages.en), files outside pages* and directories that haven't been changed.
    if [[ ! -d $lang_dir || -h $lang_dir ]] || ! grep -Fxq "$lang" <<< "$DIFF"; then
      continue
    fi

    archive_name="tldr-$lang.zip"

    # Create the zip archive

    cd "$lang_dir"
    zip -q -r "$target_directory/$archive_name" .
    zip -q -j "$target_directory/$archive_name" "$source_directory/LICENSE.md"

    echo "Pages archive of $archive_name successfully created."
  done

  cd "$target_directory"
  if grep -Fxq pages <<< "$DIFF"; then
    cp tldr-pages.zip tldr-pages.en.zip
  fi
}

###################################
# MAIN
###################################

initialize
build_index
build_archive
build_translation_archives