#!/usr/bin/env bash

set -e
set -o pipefail

echo "===================================================="
echo "WARNING!"
echo
echo "This automated installation script will be removed"
echo "on July 1, 2026. To mitigate supply chain risks,"
echo "please do not run any unpinned downloaded scripts."
echo "===================================================="
echo

get_machine_arch () {
    machine_arch=""
    case $(uname -m) in
        i386)             machine_arch="386" ;;
        i686)             machine_arch="386" ;;
        x86_64)           machine_arch="amd64" ;;
        arm64|aarch64)    machine_arch="arm64" ;;
    esac
    echo $machine_arch
}
arch=$(get_machine_arch)

echo "arch=$arch"

case "$(uname -s)" in
  Darwin*)
    os="darwin_${arch}"
    ;;
  MINGW64*)
    os="windows_${arch}"
    ;;
  MSYS_NT*)
    os="windows_${arch}"
    ;;
  *)
    os="linux_${arch}"
    ;;
esac

echo "os=$os"

echo -e "\n\n===================================================="

download_path=$(mktemp -d -t tflint.XXXXXXXXXX)
download_zip="${download_path}/tflint.zip"
download_executable="${download_path}/tflint"

if [ -z "${TFLINT_VERSION}" ] || [ "${TFLINT_VERSION}" == "latest" ]; then
  echo "Downloading latest TFLint version"
  download_url="https://github.com/terraform-linters/tflint/releases/latest/download/tflint_${os}.zip"
else
  echo "Downloading TFLint $TFLINT_VERSION"
  download_url="https://github.com/terraform-linters/tflint/releases/download/${TFLINT_VERSION}/tflint_${os}.zip"
fi

curl --fail -sS -L -o "${download_zip}" "${download_url}"
echo "Downloaded successfully"

echo -e "\n\n===================================================="
echo "Unpacking ${download_zip} ..."
unzip -o "${download_zip}" -d "${download_path}"
if [[ $os == "windows"* ]]; then
  dest="${TFLINT_INSTALL_PATH:-/bin}/"
  echo "Installing ${download_executable} to ${dest} ..."
  mv "${download_executable}" "$dest"
  retVal=$?
  if [ $retVal -ne 0 ]; then
    echo "Failed to install tflint"
    exit $retVal
  else
    echo "tflint installed at ${dest} successfully"
  fi
else
  dest="${TFLINT_INSTALL_PATH:-/usr/local/bin}/"
  echo "Installing ${download_executable} to ${dest} ..."

  if [[ -w "$dest" ]]; then SUDO=""; else
    # current user does not have write access to install directory
    SUDO="sudo";
  fi

  $SUDO mkdir -p "$dest"
  $SUDO install -c -v "${download_executable}" "$dest"
  retVal=$?
  if [ $retVal -ne 0 ]; then
    echo "Failed to install tflint"
    exit $retVal
  fi
fi

echo "Cleaning temporary downloaded files directory ${download_path} ..."
rm -rf "${download_path}"

echo -e "\n\n===================================================="
echo "Current tflint version"
"${dest}/tflint" -v
