#!/usr/bin/env bash

set -euo pipefail

# --- Configuration ---
SOURCE_REGISTRY="https://npm.pkg.github.com"
TARGET_REGISTRY="https://registry.figma.com/npm/b16c64e8-9a92-4c2b-8768-ccb57dafa103/registry/"
PACKAGE_SCOPE="@theorchard"
PACKAGE_FILTER=${1:?PACKAGE_FILTER is not provided}

# --- Validation ---
if [[ -z "${SOURCE_TOKEN:-}" || -z "${TARGET_TOKEN:-}" ]]; then
    echo "Error: SOURCE_TOKEN and TARGET_TOKEN environment variables must be set."
    echo "Usage: SOURCE_TOKEN=xxx TARGET_TOKEN=yyy $0 [filter]"
    exit 1
fi

# --- Main ---
FILTER_ARGS=()

set -f
for entry in $PACKAGE_FILTER; do
    FILTER_ARGS+=("--filter" "$entry")
done
set +f

PROJECT_ROOT=$(pwd)

SYNC_WORK_DIR=$(mktemp -d)
echo "Created pivot directory: $SYNC_WORK_DIR"

trap 'cd "$PROJECT_ROOT" && rm -rf "$SYNC_WORK_DIR"' EXIT

SOURCE_KEY=$(echo "$SOURCE_REGISTRY" | sed 's|^https:||; s|/*$|/|')
TARGET_KEY=$(echo "$TARGET_REGISTRY" | sed 's|^https:||; s|/*$|/|')

SOURCE_CONFIG="$SYNC_WORK_DIR/.npmrc.source"
TARGET_CONFIG="$SYNC_WORK_DIR/.npmrc.target"

cat << EOF > "$SOURCE_CONFIG"
${PACKAGE_SCOPE}:registry=${SOURCE_REGISTRY}
${SOURCE_KEY}:_authToken=\${SOURCE_TOKEN}
EOF

cat << EOF > "$TARGET_CONFIG"
${PACKAGE_SCOPE}:registry=${TARGET_REGISTRY}
${TARGET_KEY}:_authToken=\${TARGET_TOKEN}
EOF

echo "Identifying packages in workspace matching: $PACKAGE_FILTER"
# pnpm ls must run in the project root to see the workspace
PACKAGES=$(pnpm ls -r "${FILTER_ARGS[@]}" --json | jq -r '.[].name')

if [ -z "$PACKAGES" ]; then
    echo "No packages found."
    exit 0
fi

cd "$SYNC_WORK_DIR"

for PKG in $PACKAGES; do
    echo "---------------------------------------------------"
    echo "Package: $PKG"

    # --- CHECK SOURCE VERSION ---
    # Since we are in an empty /tmp folder, we can use --userconfig and it won't be overwritten
    VERSION=$(npm --userconfig "$SOURCE_CONFIG" view "$PKG" version 2>/dev/null || echo "not_found")

    if [ "$VERSION" == "not_found" ]; then
        echo "⏭️  Not found on GitHub. Skipping."
        continue
    fi

    echo "GitHub Version: $VERSION"

    # --- CHECK TARGET VERSION ---
    TARGET_VERSION=$(npm --userconfig "$TARGET_CONFIG" view "$PKG@$VERSION" version 2>/dev/null || echo "not_found")

    if [ "$TARGET_VERSION" == "$VERSION" ]; then
        echo "$VERSION already exists on Figma. Skipping."
    else
        echo "Syncing $VERSION: GitHub -> Figma"

        # --- GET FROM SOURCE ---
        TARBALL_NAME=$(npm --userconfig "$SOURCE_CONFIG" pack "$PKG@$VERSION" --loglevel silent | tail -n 1)

        # --- PUSH TO TARGET ---
        npm --userconfig "$TARGET_CONFIG" publish "$TARBALL_NAME" --loglevel silent

        # --- CLEANUP ---
        rm "$TARBALL_NAME"
        echo "Successfully mirrored $PKG@$VERSION"
    fi
done

echo "---------------------------------------------------"
echo "Sync complete. Pivot directory cleaned."
