#!/bin/bash

TOP_LEVEL=${PWD}

if [ "${1}" == "" ]; then
  printf "Please provide a terraform version to update all configurations to use, e.g.\n"
  printf "\n./update-tf-version.sh 0.12.20\n\n"
  exit 1
else
  TF_VERSION="${1}"
fi

VERSION_EXISTS=$(curl -s https://releases.hashicorp.com/terraform/ | grep -c "terraform_${TF_VERSION}")

if [ "${VERSION_EXISTS}" == "0" ]; then
  printf "%s is not a released version of terraform\n" "${TF_VERSION}"
  printf "Released versions can be found at https://releases.hashicorp.com/terraform/\n"
  printf "The latest version is %s\n\n" "$(curl -s https://checkpoint-api.hashicorp.com/v1/check/terraform | jq -r '.current_version')"
  exit 1
fi

update_version_files () {
  env=$1
  printf "Updating version file for %s\n" "${env}"
  for folder in ./"${env}"/*; do
    cd "${TOP_LEVEL}/${folder}" || (printf "\nDirectory %s does not exist\n" "${TOP_LEVEL}/${folder}" && exit 1)
    if [ -f "${TOP_LEVEL}/${folder}/versions.tf" ]; then
      printf "Updating pinned version for %s\n" "${TOP_LEVEL}/${folder}"
      tmpfile=$(mktemp)
      sed "s/.*required_version.*/required_version = \"${TF_VERSION}\"/" "${TOP_LEVEL}"/"${folder}"/versions.tf >"${tmpfile}" && mv -f "${tmpfile}" "${TOP_LEVEL}"/"${folder}"/versions.tf
    else
      printf "Creating versions.tf for %s\n" "${TOP_LEVEL}/${folder}"
      cat <<EOF > "${TOP_LEVEL}"/"${folder}"/versions.tf

terraform {
  required_version = "${TF_VERSION}"
}
EOF
    fi
    terraform fmt
    cd "${TOP_LEVEL}" || (printf "\nDirectory %s does not exist\n" "${TOP_LEVEL}" && exit 1)
  done
}

envs=("qa" "prod")

for env in "${envs[@]}"; do
  update_version_files "${env}"
done
