#!/bin/bash
#
# Generate release files (ZIP archives of the extension source code).
#
# Precondition: webpack has already built the extension.

# Prints help text
function usage() {
  cat <<END

  Usage: $progname [--channel CHANNEL --browser BROWSER]

  optional arguments:
    -h, --help     show this help message and exit
    -c, --channel  indicates the channel of the release. Can be "beta",
                   "stable" or "canary". Defaults to "stable".
    -b, --browser  indicates the target browser for the release. Can be
                   "chromium", "gecko" or "chromium_mv3".
                   Defaults to "chromium".

END
}

# Updates manifest.json field
function set_manifest_field() {
  sed -i -E "s/\"$1\": \"[^\"]*\"/\"$1\": \"$2\"/" dist/$browser/manifest.json
}

# Get options
opts=$(getopt -l "help,channel:,browser:" -o "hc:b:" -n "$progname" -- "$@")
eval set -- "$opts"

channel=stable
browser=chromium
folder=null

while true; do
  case "$1" in
    -h | --help)
      usage
      exit
      ;;
    -c | --channel)
      channel="$2"
      shift 2
      ;;
    -b | --browser)
      browser="$2"
      shift 2
      ;;
    *) break ;;
  esac
done

if [[ $channel != "stable" && $channel != "beta" && \
  $channel != "canary" ]]; then
  echo "channel parameter value is incorrect." >&2
  usage
  exit
fi

if [[ $browser != "chromium" && $browser != "gecko" && \
  $browser != "chromium_mv3" ]]; then
  echo "browser parameter value is incorrect." >&2
  usage
  exit
fi

echo "Started building release..."

# This is the version name which git gives us
version=$(git describe --always --tags --dirty)

# If the version name contains a hyphen then it isn't a release
# version. This is also the case if it doesn't start with a "v".
if [[ $version == *"-"* || $version != "v"* ]]; then
  if [[ $channel == "canary" && $version == "v"* && \
    $version != *"dirty" ]]; then
    # If we're releasing a canary build and the build is not dirty,
    # generate a version number
    IFS='-' read -ra versionExplode <<< "${version:1}"
    versionCanary="${versionExplode[0]}.${versionExplode[1]}"
    set_manifest_field "version" "$versionCanary"
    set_manifest_field "version_name" "$versionCanary-$channel"
  else
    # As it isn't a release version, setting version number to 0 so it
    # cannot be uploaded to the Chrome Web Store
    set_manifest_field "version" "0"
    set_manifest_field "version_name" "$version-$channel"
  fi
else
  # It is a release version, set the version fields accordingly.
  set_manifest_field "version" "${version:1}"
  set_manifest_field "version_name" "${version:1}-$channel"
fi

if [[ $channel == "canary" ]]; then
  # Change manifest.json to label the release as canary
  set_manifest_field "name" "__MSG_appNameCanary__"

  if [[ $browser == "gecko" ]]; then
    # Change the extension ID
    set_manifest_field "id" "twpowertools+canary@avm99963.com"
  fi
elif [[ $channel == "beta" ]]; then
  # Change manifest.json to label the release as beta
  set_manifest_field "name" "__MSG_appNameBeta__"

  if [[ $browser == "gecko" ]]; then
    # Change the extension ID
    set_manifest_field "id" "twpowertools+beta@avm99963.com"
  fi
else
  if [[ $browser == "gecko" ]]; then
    set_manifest_field "name" "__MSG_appNameGecko__"
  fi
fi

# Create ZIP file for upload to the Chrome Web Store
mkdir -p out
rm -rf out/twpowertools-$version-$browser-$channel.zip
(cd dist/$browser &&
  zip -rq ../../out/twpowertools-$version-$browser-$channel.zip * -x "*/.git*" \
    -x "*/\.DS_Store" -x "*/OWNERS")

echo "Done!"
