#!/usr/bin/env bash
# Setup script for StablecoinReserveVault
# Configures and funds the reserve vault with official tokens

set -euo pipefail

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

# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
log_error() { echo -e "${RED}[✗]${NC} $1"; }

if [[ -f "$SCRIPT_DIR/lib/deployment/dotenv.sh" ]]; then
  # shellcheck disable=SC1090
  source "$SCRIPT_DIR/lib/deployment/dotenv.sh"
  load_deployment_env --repo-root "$PROJECT_ROOT"
elif [ -f "$PROJECT_ROOT/.env" ]; then
    set -a && source "$PROJECT_ROOT/.env" && set +a
fi

RPC_URL="${RPC_URL:-${ETHEREUM_MAINNET_RPC:-${ETH_MAINNET_RPC_URL:-}}}"
RPC_URL="${RPC_URL%$'\r'}"
RPC_URL="${RPC_URL%$'\n'}"
VAULT_ADDRESS="${STABLECOIN_RESERVE_VAULT_ADDRESS:-}"
OFFICIAL_USDT="${OFFICIAL_USDT_ADDRESS:-0xdAC17F958D2ee523a2206206994597C13D831ec7}"
OFFICIAL_USDC="${OFFICIAL_USDC_ADDRESS:-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48}"

if [ -z "$RPC_URL" ]; then
    log_error "RPC_URL not set. Please set ETH_MAINNET_RPC_URL or RPC_URL"
    exit 1
fi

if [ -z "$VAULT_ADDRESS" ]; then
    log_error "STABLECOIN_RESERVE_VAULT_ADDRESS not set"
    exit 1
fi

if [ -z "$PRIVATE_KEY" ]; then
    log_error "PRIVATE_KEY not set"
    exit 1
fi

log_info "========================================="
log_info "StablecoinReserveVault Setup"
log_info "========================================="
log_info ""
log_info "Vault Address: $VAULT_ADDRESS"
log_info "Official USDT: $OFFICIAL_USDT"
log_info "Official USDC: $OFFICIAL_USDC"
log_info "RPC URL: $RPC_URL"
log_info ""

# Check vault status
log_info "Checking vault status..."
USDT_RESERVE=$(cast call "$VAULT_ADDRESS" "usdtReserveBalance()" --rpc-url "$RPC_URL" 2>/dev/null | cast --to-dec 2>/dev/null || echo "0")
USDC_RESERVE=$(cast call "$VAULT_ADDRESS" "usdcReserveBalance()" --rpc-url "$RPC_URL" 2>/dev/null | cast --to-dec 2>/dev/null || echo "0")
PAUSED=$(cast call "$VAULT_ADDRESS" "paused()" --rpc-url "$RPC_URL" 2>/dev/null | cast --to-dec 2>/dev/null || echo "false")

log_info "Current USDT Reserve: $USDT_RESERVE"
log_info "Current USDC Reserve: $USDC_RESERVE"
log_info "Paused Status: $PAUSED"

if [ "$PAUSED" = "1" ] || [ "$PAUSED" = "true" ]; then
    log_warn "Vault is paused. Operations are disabled."
    read -p "Do you want to unpause? (y/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        log_info "Unpausing vault..."
        cast send "$VAULT_ADDRESS" \
          "unpause()" \
          --rpc-url "$RPC_URL" \
          --private-key "$PRIVATE_KEY" \
          --gas-price 30000000000 \
          --legacy
        log_success "Vault unpaused"
    fi
fi

log_info ""
log_info "To fund the vault:"
log_info "1. Approve tokens to vault:"
log_info "   cast send $OFFICIAL_USDT \\"
log_info "     \"approve(address,uint256)\" \\"
log_info "     $VAULT_ADDRESS \\"
log_info "     <amount> \\"
log_info "     --rpc-url $RPC_URL \\"
log_info "     --private-key \$PRIVATE_KEY"
log_info ""
log_info "2. Deposit USDT:"
log_info "   cast send $VAULT_ADDRESS \\"
log_info "     \"depositUSDT(uint256)\" \\"
log_info "     <amount> \\"
log_info "     --rpc-url $RPC_URL \\"
log_info "     --private-key \$PRIVATE_KEY"
log_info ""
log_info "3. Deposit USDC (similar for USDC)"

