#!/usr/bin/env bash
set -euo pipefail

readonly SWIFTGEN_VERSION="6.6.3"
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly BIN_DIR="$SCRIPT_DIR/.bin"
readonly SWIFTGEN_VERSION_STR="$(echo "$SWIFTGEN_VERSION" | tr '.' '_')"
readonly SWIFTGEN_BIN_DIR="$BIN_DIR/swiftgen_$SWIFTGEN_VERSION_STR"
readonly SWIFTGEN_BIN="$SWIFTGEN_BIN_DIR/swiftgen"

function install() {
  local os="$(uname -s)"
  local arch="$(uname -m)"
  local download_file_name

  case "$os" in
    Darwin)
      # SwiftGen provides a universal macOS binary
      download_file_name="swiftgen-${SWIFTGEN_VERSION}.artifactbundle.zip"
      ;;
    Linux)
      case "$arch" in
        x86_64|amd64)
          download_file_name="swiftgen-${SWIFTGEN_VERSION}-linux.artifactbundle.zip"
          ;;
        aarch64|arm64)
          download_file_name="swiftgen-${SWIFTGEN_VERSION}-linux.artifactbundle.zip"
          ;;
        *)
          echo "Unsupported Linux architecture: $arch"
          exit 1
          ;;
      esac
      ;;
    *)
      echo "Unsupported OS: $os"
      exit 1
      ;;
  esac

  local download_url="https://github.com/SwiftGen/SwiftGen/releases/download/${SWIFTGEN_VERSION}/${download_file_name}"

  mkdir -p "$SWIFTGEN_BIN_DIR"

  echo "Downloading SwiftGen ${SWIFTGEN_VERSION} → ${download_file_name}"
  curl -fsSL --progress-bar "$download_url" -o "$SWIFTGEN_BIN_DIR/swiftgen.zip"

  echo "Extracting ${download_file_name}"
  unzip -q "$SWIFTGEN_BIN_DIR/swiftgen.zip" -d "$SWIFTGEN_BIN_DIR"

  # Find the binary named 'swiftgen' in the extracted payload
  found_bin="$(find "$SWIFTGEN_BIN_DIR" -type f -name swiftgen -perm -u+x | head -n 1 || true)"
  if [ -z "${found_bin:-}" ]; then
    # Some archives may not keep +x bit; look for the file and chmod it.
    found_bin="$(find "$SWIFTGEN_BIN_DIR" -type f -name swiftgen | head -n 1 || true)"
    if [ -z "${found_bin:-}" ]; then
      echo "Failed to locate 'swiftgen' in ${download_file_name}"
      exit 1
    fi
    chmod +x "$found_bin"
  fi

  chmod +x "$found_bin"
    ln -s "$found_bin" "$SWIFTGEN_BIN"

  # On macOS, remove quarantine if present (harmless elsewhere)
  if command -v xattr >/dev/null 2>&1; then
    xattr -d com.apple.quarantine "$found_bin" 2>/dev/null || true
  fi
}

if [ ! -f "$SWIFTGEN_BIN" ]; then
  install >&2
fi

pushd "Sources/Localization/SwiftGen" 2>/dev/null
exec "$SWIFTGEN_BIN" "$@"
popd 2>/dev/null
