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

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "$ROOT"

VERSION="${RELEASE_VERSION:-}"
if [[ -z "$VERSION" ]]; then
  VERSION="$(git describe --tags --exact-match 2>/dev/null || true)"
fi
if [[ -z "$VERSION" ]]; then
  VERSION="0.0.0-dev"
fi

BINARY_VERSION="${VERSION#v}"
COMMIT="${RELEASE_COMMIT:-$(git rev-parse HEAD)}"
DATE="${RELEASE_DATE:-$(git show -s --format=%cI "$COMMIT")}"
DIST_DIR="${DIST_DIR:-$ROOT/dist}"
CHECKSUMS="$DIST_DIR/checksums.txt"
TARGETS="${RELEASE_TARGETS:-darwin/arm64 linux/amd64 linux/arm64 windows/amd64}"
if [[ -n "${GOOS:-}" && -n "${GOARCH:-}" && -z "${RELEASE_TARGETS:-}" ]]; then
  TARGETS="$GOOS/$GOARCH"
fi

mkdir -p "$DIST_DIR"
: > "$CHECKSUMS"

for target in $TARGETS; do
  TARGET_OS="${target%/*}"
  TARGET_ARCH="${target#*/}"
  PACKAGE="gitcode-mcp_${VERSION}_${TARGET_OS}_${TARGET_ARCH}"
  PACKAGE_DIR="$DIST_DIR/$PACKAGE"
  BINARY="gitcode-mcp"
  ARCHIVE="$DIST_DIR/$PACKAGE.tar.gz"

  if [[ "$TARGET_OS" == "windows" ]]; then
    BINARY="gitcode-mcp.exe"
    ARCHIVE="$DIST_DIR/$PACKAGE.zip"
  fi

  rm -rf "$PACKAGE_DIR" "$ARCHIVE"
  mkdir -p "$PACKAGE_DIR"

  CGO_ENABLED=0 GOOS="$TARGET_OS" GOARCH="$TARGET_ARCH" go build \
    -trimpath \
    -ldflags "-s -w -X gitcode-mcp/internal/buildinfo.Version=$BINARY_VERSION -X gitcode-mcp/internal/buildinfo.Commit=$COMMIT -X gitcode-mcp/internal/buildinfo.Date=$DATE" \
    -o "$PACKAGE_DIR/$BINARY" \
    ./cmd/gitcode-mcp

  cat > "$PACKAGE_DIR/README.txt" <<README
gitcode-mcp $VERSION

Install:
  macOS/Linux: install -m 0755 gitcode-mcp /usr/local/bin/gitcode-mcp
  Windows: add gitcode-mcp.exe to a directory on PATH

Verify:
  gitcode-mcp --version
README

  if [[ "$TARGET_OS" == "windows" ]]; then
    (cd "$DIST_DIR" && zip -qr "$(basename "$ARCHIVE")" "$PACKAGE")
  else
    tar -C "$DIST_DIR" -czf "$ARCHIVE" "$PACKAGE"
  fi

  if command -v sha256sum >/dev/null 2>&1; then
    (cd "$DIST_DIR" && sha256sum "$(basename "$ARCHIVE")" >> "$CHECKSUMS")
  else
    (cd "$DIST_DIR" && shasum -a 256 "$(basename "$ARCHIVE")" >> "$CHECKSUMS")
  fi

  echo "$ARCHIVE"
done