#!/bin/bash
set -e

root="$(dirname "$0")/.."
if command -v realpath > /dev/null; then
  root="$(realpath "$root")"
fi

if [[ "$#" -lt "1" ]]; then
  {
    echo "$0: error: missing version number"
    echo "usage: $0 VERSION"
  } > /dev/stderr
  exit 1
fi

version="$1"

if [[ "$version" = *-* ]]; then
  {
    echo "$0: error: the version number must not end with any suffix:"
    echo "  $version"
  } > /dev/stderr
  exit 1
fi

csproj="$root/src/Libplanet/Libplanet.csproj"
if command -v xmllint > /dev/null; then
  csproj_version="$(xmllint \
    --xpath '/*[local-name()="Project"]
             /*[local-name()="PropertyGroup"]
             /*[local-name()="VersionPrefix"]
             /text()' \
    "$csproj")"
else
  regex='<VersionPrefix>([0-9]+\.[0-9]+\.[0-9]+)</VersionPrefix>'
  if [[ "$(grep '<VersionPrefix>[^>]*</VersionPrefix>' "$csproj")" =~ $regex ]]
  then
    csproj_version="${BASH_REMATCH[1]}"
  else
    echo "$0: error: failed to find <VersionPrefix> tag from $csproj file" \
      > /dev/stderr
    exit 1
  fi
fi

if [[ "$csproj_version" != "$version" ]]; then
  {
    echo "$0: error: the version numbers must match"
    echo "  $version (tag)"
    echo "  $csproj_version ($csproj)"
  } > /dev/stderr
  exit 1
fi

if grep -i 'to be released' "$root/CHANGES.md" > /dev/stderr; then
  echo "$0: error: $root/CHANGES.md file must not contain unreleased notes." \
    > /dev/stderr
  exit 1
fi

# vim: set filetype=sh ts=2 sw=2 et:
