#!/bin/bash

# Test Package Publisher
# Usage: ./publish-test.sh <version> [otp]

set -e

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Check if version is provided
if [ -z "$1" ]; then
    echo -e "${RED}Error: Version number required${NC}"
    echo "Usage: ./publish-test.sh <version> [otp]"
    echo "Example: ./publish-test.sh 3.0.0"
    echo "Example with OTP: ./publish-test.sh 3.0.0 123456"
    exit 1
fi

VERSION=$1
OTP=$2
PACKAGE_NAME="test-uniswap-position-quoter"
BACKUP_FILE="package.json.backup"

echo -e "${YELLOW}Starting test package publish process...${NC}"

# Step 1: Check if logged in to npm
echo -e "\n${YELLOW}Step 1: Checking npm authentication...${NC}"
if ! npm whoami &> /dev/null; then
    echo -e "${RED}Not logged in to npm. Please run: npm login${NC}"
    exit 1
fi

NPM_USER=$(npm whoami)
echo -e "${GREEN}✓ Logged in as: $NPM_USER${NC}"

# Step 2: Backup original package.json
echo -e "\n${YELLOW}Step 2: Backing up package.json...${NC}"
cp package.json "$BACKUP_FILE"
echo -e "${GREEN}✓ Backup created${NC}"

# Step 3: Clean and build
echo -e "\n${YELLOW}Step 3: Building package...${NC}"
npm run clean
npm run build:release
echo -e "${GREEN}✓ Build completed${NC}"

# Step 4: Update package.json for test release
echo -e "\n${YELLOW}Step 4: Updating package.json...${NC}"
node -e "
const fs = require('fs');
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
pkg.name = '$PACKAGE_NAME';
pkg.version = '$VERSION';
fs.writeFileSync('package.json', JSON.stringify(pkg, null, 2) + '\n');
"
echo -e "${GREEN}✓ Package name: $PACKAGE_NAME${NC}"
echo -e "${GREEN}✓ Package version: $VERSION${NC}"

# Step 5: Publish
echo -e "\n${YELLOW}Step 5: Publishing to npm...${NC}"
if [ -n "$OTP" ]; then
    echo -e "${YELLOW}Using OTP for 2FA authentication${NC}"
    if npm publish --access public --otp="$OTP"; then
        echo -e "${GREEN}✓ Successfully published $PACKAGE_NAME@$VERSION${NC}"
        PUBLISH_SUCCESS=true
    else
        echo -e "${RED}✗ Publish failed${NC}"
        PUBLISH_SUCCESS=false
    fi
else
    if npm publish --access public; then
        echo -e "${GREEN}✓ Successfully published $PACKAGE_NAME@$VERSION${NC}"
        PUBLISH_SUCCESS=true
    else
        echo -e "${RED}✗ Publish failed${NC}"
        PUBLISH_SUCCESS=false
    fi
fi

# Step 6: Restore original package.json
echo -e "\n${YELLOW}Step 6: Restoring original package.json...${NC}"
mv "$BACKUP_FILE" package.json
echo -e "${GREEN}✓ Original package.json restored${NC}"

# Final status
echo -e "\n${YELLOW}========================================${NC}"
if [ "$PUBLISH_SUCCESS" = true ]; then
    echo -e "${GREEN}✓ Test package published successfully!${NC}"
    echo -e "${GREEN}  Package: $PACKAGE_NAME@$VERSION${NC}"
    echo -e "${GREEN}  Install with: npm install $PACKAGE_NAME@$VERSION${NC}"
    exit 0
else
    echo -e "${RED}✗ Publish failed. Please check the errors above.${NC}"
    exit 1
fi
