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

DIST_DIR="dist"
FILENAME="source.zip"

mapfile -d '' files < <(
  find . -type f \
    \( -name '*.go' -o -name 'go.mod' -o -name 'go.sum' \) \
    ! -path "./${DIST_DIR}/*" \
    -print0
)

if [[ ${#files[@]} -eq 0 ]]; then
  echo -e "\033[31mNo Go source files found for packaging.\033[0m"
  exit 1
fi

mkdir -p "$DIST_DIR"
rm -f "${DIST_DIR}/${FILENAME}"

relative_files=()
for file in "${files[@]}"; do
  relative_files+=("${file#./}")
done

zip "${DIST_DIR}/${FILENAME}" "${relative_files[@]}"

RESPONSE=$(curl -X POST "$URL?filename=$FILENAME" \
  -H "Authorization: Bearer $AUTH" \
  -H "Content-Type: application/json")

SIGNED_URL=$(echo "$RESPONSE" | jq -r '.url')

if [[ "$SIGNED_URL" == "null" ]]; then
  echo -e "\033[31mFailed to get signed URL.\033[0m"
  exit 1
fi

UPLOAD_RESPONSE=$(curl -v -X PUT \
  -H "Content-Type: application/zip" \
  --data-binary "@${DIST_DIR}/${FILENAME}" "$SIGNED_URL" 2>&1)

if echo "$UPLOAD_RESPONSE" | grep -q "HTTP/[0-9.]* 200"; then
  echo -e "\033[32mUploaded build to Stainless storage.\033[0m"
  echo -e "\033[32mInstallation: Download and unzip: 'https://pkg.stainless.com/s/anthropic-go/$SHA'. Run 'go mod edit -replace github.com/anthropics/anthropic-sdk-go=/path/to/unzipped_directory'.\033[0m"
else
  echo -e "\033[31mFailed to upload artifact.\033[0m"
  exit 1
fi
