#!/bin/bash

# Phase 1: Environment Setup
# This script helps set up the deployment environment

set -e

echo "=== Phase 1: Environment Setup ==="

# Check if .env exists
if [ ! -f .env ]; then
    echo "Creating .env file from template..."
    if [ -f .env.template ]; then
        cp .env.template .env
        echo "✓ .env file created from template"
        echo "⚠️  Please edit .env and fill in all required values"
    else
        echo "Error: .env.template not found"
        exit 1
    fi
else
    echo "✓ .env file already exists"
fi

# Load environment variables
if [ -f .env ]; then
    export $(cat .env | grep -v '^#' | grep -v '^$' | xargs)
fi

# Verify required variables
REQUIRED_VARS=(
    "PRIVATE_KEY"
    "ETHEREUM_MAINNET_RPC"
    "RPC_URL_138"
    "ETHERSCAN_API_KEY"
)

MISSING_VARS=()
for var in "${REQUIRED_VARS[@]}"; do
    if [ -z "${!var}" ] || [ "${!var}" == "0x..." ] || [ "${!var}" == "your_etherscan_api_key" ]; then
        MISSING_VARS+=("$var")
    fi
done

if [ ${#MISSING_VARS[@]} -gt 0 ]; then
    echo ""
    echo "⚠️  Missing or incomplete required variables:"
    for var in "${MISSING_VARS[@]}"; do
        echo "  - $var"
    done
    echo ""
    echo "Please edit .env and fill in all required values"
    exit 1
fi

echo ""
echo "--- Verifying RPC Endpoints ---"

# Verify Ethereum Mainnet RPC
if command -v cast &> /dev/null; then
    echo "Checking Ethereum Mainnet RPC..."
    BLOCK_NUMBER=$(cast block-number --rpc-url "$ETHEREUM_MAINNET_RPC" 2>/dev/null || echo "0")
    if [ "$BLOCK_NUMBER" != "0" ]; then
        echo "✓ Ethereum Mainnet RPC accessible (block: $BLOCK_NUMBER)"
    else
        echo "✗ Ethereum Mainnet RPC not accessible"
        exit 1
    fi

    # Verify ChainID 138 RPC
    echo "Checking ChainID 138 RPC..."
    if [ ! -z "$RPC_URL_138" ] && [ "$RPC_URL_138" != "http://chain138.example.com:8545" ]; then
        BLOCK_NUMBER_138=$(cast block-number --rpc-url "$RPC_URL_138" 2>/dev/null || echo "0")
        if [ "$BLOCK_NUMBER_138" != "0" ]; then
            echo "✓ ChainID 138 RPC accessible (block: $BLOCK_NUMBER_138)"
        else
            echo "⚠️  ChainID 138 RPC not accessible (may not be deployed yet)"
        fi
    else
        echo "⚠️  ChainID 138 RPC not configured"
    fi
else
    echo "⚠️  cast command not found. Install foundry to verify RPC endpoints."
fi

echo ""
echo "--- Checking ETH Balance ---"

if command -v cast &> /dev/null; then
    DEPLOYER_ADDRESS=$(cast wallet address $PRIVATE_KEY 2>/dev/null || echo "")
    if [ ! -z "$DEPLOYER_ADDRESS" ]; then
        BALANCE=$(cast balance "$DEPLOYER_ADDRESS" --rpc-url "$ETHEREUM_MAINNET_RPC" 2>/dev/null || echo "0")
        BALANCE_ETH=$(cast --to-unit "$BALANCE" ether 2>/dev/null || echo "0")
        echo "Deployer address: $DEPLOYER_ADDRESS"
        echo "Balance: $BALANCE_ETH ETH"
        
        MIN_BALANCE=5
        if (( $(echo "$BALANCE_ETH < $MIN_BALANCE" | bc -l) )); then
            echo "⚠️  Balance is less than recommended minimum ($MIN_BALANCE ETH)"
            echo "   Recommended: 5-10 ETH for deployment"
        else
            echo "✓ Sufficient ETH balance for deployment"
        fi
    else
        echo "⚠️  Could not derive address from PRIVATE_KEY"
    fi
else
    echo "⚠️  cast command not found. Install foundry to check balance."
fi

echo ""
echo "=== Phase 1 Complete ==="
echo "Environment is ready for deployment"

