#!/usr/bin/env bash

parse_semver() {
  REGEX='^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
  echo "input: [$1]"
  TEXT="$1"
  if [[ $TEXT =~ (0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))? ]]; then
    echo "${BASH_REMATCH[1]}"
    echo "${BASH_REMATCH[2]}"
    echo "${BASH_REMATCH[3]}"
  else
    echo "NO"
  fi
}

# gets the latest version by looking at git tags
get_latest_git_tag() {
  RESULT="v0.0.0"
  RESULT=$(git tag | grep -E 'v([0-9]+)\.([0-9]+)\.([0-9]+)' | tail -n 1)
}

# gets the current version in Cargo.toml
get_cargo_toml_version() {
  RESULT=
  while read -r LINE; do
    if [[ $LINE =~ ^version.*\"(.*)\" ]]; then
      CARGO_VERSION=${BASH_REMATCH[1]}
      RESULT="v$CARGO_VERSION"
    fi
  done < <(cat $CARGO_MANIFEST_DIR/Cargo.toml)
}

# brings x.y.z to x.y.(z+1)
# v?0.6.8 -> 0.6.9
next_version() {
  RESULT= CURRENT="$1"
  if [[ $CURRENT =~ ([0-9]+)\.([0-9]+)\.([0-9]+) ]]; then
    major=${BASH_REMATCH[1]}
    minor=${BASH_REMATCH[2]}
    patch=${BASH_REMATCH[3]}
    let patch++
    RESULT="$major.$minor.$patch"
  fi
}

set_cargo_toml_version() {
  VERSION="$1"
  TMP=Cargo.tmp
  SRC=$CARGO_MANIFEST_DIR/Cargo.toml
  while read -r LINE; do
    if [[ $LINE =~ ^version.*\"(.*)\" ]]; then
      echo "version = \"${VERSION}\"" >>$TMP
    else
      echo $LINE >>$TMP
    fi
  done < <(cat $SRC)
  mv $TMP $SRC
}
