#!/bin/bash -ex
#
# script/bottle
# mas
#
# Builds bottles of mas Homebrew formula for custom tap:
# https://github.com/mas-cli/homebrew-tap
#
# This script should be run _after_ the formula has been updated in Homebrew
#

################################################################################
#
# Variables
#

BUILD_DIR="${PWD}/.build"
BOTTLE_DIR="${BUILD_DIR}/bottles"
CORE_TAP_PATH="$(brew --repository homebrew/core)"
MAS_VERSION=$(script/version)
ROOT_URL="https://github.com/mas-cli/mas/releases/download/v${MAS_VERSION}"

# Supports macOS 10.13 and later
OS_NAMES=(
  sequoia
  arm64_sequoia
  sonoma
  arm64_sonoma
  ventura
  arm64_ventura
  monterey
  arm64_monterey
  big_sur
  arm64_big_sur
  catalina
  mojave
  high_sierra
  sierra
  el_capitan
)

# Semantic version number split into a list using ugly, bash 3 compatible syntax
IFS=" " read -r -a CURRENT_OS_VERSION <<<"$(sw_vers -productVersion | sed 's/\./ /g')"
CURRENT_OS_VERSION_MAJOR=${CURRENT_OS_VERSION[0]}
CURRENT_OS_VERSION_MINOR=${CURRENT_OS_VERSION[1]}

echo "CURRENT_OS_VERSION_MAJOR: ${CURRENT_OS_VERSION_MAJOR}"
echo "CURRENT_OS_VERSION_MINOR: ${CURRENT_OS_VERSION_MINOR}"

case "${CURRENT_OS_VERSION_MAJOR}" in
  15)
    CURRENT_PLATFORM=sequoia
    ;;
  14)
    CURRENT_PLATFORM=sonoma
    ;;
  13)
    CURRENT_PLATFORM=ventura
    ;;
  12)
    CURRENT_PLATFORM=monterey
    ;;
  11)
    CURRENT_PLATFORM=big_sur
    ;;
  10)
    CURRENT_PLATFORM=catalina
    ;;
  *)
    echo "Unsupported macOS version. This script requires Catalina or better."
    exit 1
    ;;
esac

# Prefix platform with architecture
if [[ "arm64" == "$(uname -m)" ]]; then
  CURRENT_PLATFORM="arm64_${CURRENT_PLATFORM}"
fi

echo "CURRENT_PLATFORM: ${CURRENT_PLATFORM}"

# Output filename from build-bottle command
OLD_FILENAME="mas--${MAS_VERSION}.${CURRENT_PLATFORM}.bottle.tar.gz"

################################################################################
#
# Preflight checks
#

# # Uninstall if necessary
# brew remove mas 2>/dev/null || true
# brew remove mas-cli/tap/mas 2>/dev/null || true

# # Uninstall if still found on path
# if command -v mas >/dev/null; then
#   script/uninstall || true
# fi

# Use formula from custom tap
# brew tap mas-cli/tap
# brew update

# Audit formula
brew audit --strict --verbose --formula --tap mas-cli/tap mas
brew style Homebrew/mas-tap.rb

################################################################################
#
# Build the formula for the current macOS version and architecture.
#

echo "==> 🍼 Bottling mas ${MAS_VERSION} for: ${OS_NAMES[*]}"
brew install --build-bottle mas-cli/tap/mas

# Generate bottle do block, dropping last 2 lines
brew bottle --verbose --no-rebuild --root-url="${ROOT_URL}" mas-cli/tap/mas
if ! test -e "${OLD_FILENAME}"; then
  echo "Bottle not found: ${OLD_FILENAME}"
  echo "If an old version is showing in the log and filename, then make sure the formula has been updated in:"
  echo "${CORE_TAP_PATH}"
  exit 1
fi

SHA256=$(shasum --algorithm 256 "${OLD_FILENAME}" | cut -f 1 -d ' ' -)

mkdir -p "${BOTTLE_DIR}"

# Start of bottle block
BOTTLE_BLOCK=$(
  cat <<-EOF
bottle do
  root_url "${ROOT_URL}"
EOF
)

################################################################################
#
# Copy the bottle for all macOS version + architecture combinations.
#

# Fix filename
for os in "${OS_NAMES[@]}"; do
  new_filename="mas-${MAS_VERSION}.${os}.bottle.tar.gz"
  cp -v "${OLD_FILENAME}" "${BOTTLE_DIR}/${new_filename}"

  # Append each os
  # BOTTLE_BLOCK="$(printf "${BOTTLE_BLOCK}\n  sha256 cellar: :any_skip_relocation, %-15s %s" "${os}:" "${SHA256}")"
  BOTTLE_BLOCK="${BOTTLE_BLOCK}"$(
    cat <<-EOF

    sha256 cellar: :any_skip_relocation, ${os}: "${SHA256}"
EOF
  )
done

# End of bottle block
BOTTLE_BLOCK=$(
  cat <<-EOF

end
EOF
)

rm "${OLD_FILENAME}"
ls -l "${BOTTLE_DIR}"
echo "${BOTTLE_BLOCK}"
