#!/usr/bin/env bash
# Transfer contract ownership to multisig
# Usage: ./transfer-ownership.sh <multisig_address> <contract_address> [contract_name]

set -euo pipefail

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

source "$PROJECT_ROOT/.env" 2>/dev/null || true

MULTISIG_ADDRESS="${1:-}"
CONTRACT_ADDRESS="${2:-}"
CONTRACT_NAME="${3:-Unknown}"

if [ -z "$MULTISIG_ADDRESS" ] || [ -z "$CONTRACT_ADDRESS" ]; then
    echo "Usage: $0 <multisig_address> <contract_address> [contract_name]"
    echo ""
    echo "Example:"
    echo "  $0 0x1234... 0x5678... LiquidityPoolETH"
    exit 1
fi

RPC_URL="${ETHEREUM_MAINNET_RPC:-${RPC_URL:-}}"
if [ -z "$RPC_URL" ]; then
    echo "Error: RPC_URL or ETHEREUM_MAINNET_RPC must be set"
    exit 1
fi

PRIVATE_KEY="${PRIVATE_KEY:-}"
if [ -z "$PRIVATE_KEY" ]; then
    echo "Error: PRIVATE_KEY must be set"
    exit 1
fi

echo "Transferring ownership to multisig..."
echo "Contract: $CONTRACT_NAME ($CONTRACT_ADDRESS)"
echo "Multisig: $MULTISIG_ADDRESS"
echo ""

# Check if contract has owner function
echo "Checking contract functions..."
OWNER=$(cast call "$CONTRACT_ADDRESS" "owner()" --rpc-url "$RPC_URL" 2>/dev/null || echo "")

if [ -z "$OWNER" ]; then
    echo "⚠️  Contract may not have owner() function"
    echo "   Check if contract uses different access control pattern"
    echo ""
fi

# Create transfer transaction
# Note: Adjust function name based on contract (transferOwnership, setOwner, etc.)
TRANSFER_DATA=$(cast calldata "transferOwnership(address)" "$MULTISIG_ADDRESS" 2>/dev/null || \
                cast calldata "setOwner(address)" "$MULTISIG_ADDRESS" 2>/dev/null || \
                echo "")

if [ -z "$TRANSFER_DATA" ]; then
    echo "⚠️  Could not determine transfer function"
    echo "   Common functions:"
    echo "     - transferOwnership(address)"
    echo "     - setOwner(address)"
    echo "     - updateOwner(address)"
    echo ""
    echo "   Manual transfer required"
    exit 1
fi

echo "Transfer transaction data:"
echo "  To: $CONTRACT_ADDRESS"
echo "  Data: $TRANSFER_DATA"
echo ""

# For safety, don't auto-execute
echo "⚠️  To execute this transfer:"
echo ""
echo "Option 1: Use cast send (if current owner)"
echo "  cast send $CONTRACT_ADDRESS \"transferOwnership(address)\" $MULTISIG_ADDRESS \\"
echo "    --rpc-url $RPC_URL \\"
echo "    --private-key $PRIVATE_KEY"
echo ""

echo "Option 2: Use multisig (if already transferred)"
echo "  1. Create transaction in multisig"
echo "  2. Get required signatures"
echo "  3. Execute transaction"
echo ""

# Create transaction file
TX_FILE="$SCRIPT_DIR/transfer-ownership-$(date +%Y%m%d-%H%M%S).json"
cat > "$TX_FILE" <<EOF
{
  "contract": "$CONTRACT_NAME",
  "contractAddress": "$CONTRACT_ADDRESS",
  "multisig": "$MULTISIG_ADDRESS",
  "action": "transferOwnership",
  "calldata": "$TRANSFER_DATA",
  "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF

echo "Transaction details saved to: $TX_FILE"
echo ""
echo "After transfer:"
echo "1. Verify ownership: cast call $CONTRACT_ADDRESS \"owner()\" --rpc-url $RPC_URL"
echo "2. Test multisig operations"
echo "3. Document ownership transfer"

