#!/usr/bin/bash
# [MISE] hide=true
# [MISE] depends=["rust:setup"]
# [MISE] tools={"cargo-binstall"="latest","cargo:cargo-zigbuild"="latest", "zig"="latest"}
# [MISE] env={RUSTFLAGS="-C target-feature=+crt-static"}
# [USAGE] arg "[target]" help="Target triple" {
# [USAGE]   choices "armv7-unknown-linux-musleabihf" "x86_64-unknown-linux-musl" "aarch64-unknown-linux-musl"
# [USAGE] }
# [USAGE] flag "--release" help="Build release mode"

set -o errexit
set -o pipefail

# Inserts version and target into filename before extension or at end if no extension
insert_version_target() {
  local filename="${1?}"
  local version="${2?}"
  local target="${3?}"
  local base ext new_name

  # Extract base and extension
  if [[ "${filename}" =~ ^(.+)\.(.+)$ ]]; then
    base="${BASH_REMATCH[1]}"
    ext=".${BASH_REMATCH[2]}"
    new_name="${base}.${version}.${target}${ext}"
  else
    new_name="${filename}.${version}.${target}"
  fi
  echo "${new_name}"
}

default_target="x86_64-unknown-linux-musl"
target="${usage_target:-${default_target}}"

echo "Starting zigbuild"
# shellcheck disable=SC2086
cargo zigbuild --target ${target} ${usage_release:+--release}

echo "Selecting profile"
if [[ "${usage_release}" == "true" ]]; then
  profile="release"
else
  profile="debug"
fi

echo "Profile ${profile} selected"

if [[ "${target}" != "" ]]; then
  echo "Extracting artifacts for ${target}"
  for f in "target/${target}/${profile}/"*; do
    if [[ -x "${f}" && -f "${f}" ]]; then
      new_name="target/${profile}/$(insert_version_target "$(basename "${f}")" "${MORTENLJ_MISE_LIB_VERSION:-0.0}" "${target}")"
      echo "Copying '${f}' to '${new_name}'"
      cp "${f}" "${new_name}"
    fi
  done
fi
