#!/usr/bin/env python3

import ccxt
import sys
import json

def test_mt5_comprehensive():
    print("=== MT5 Comprehensive Test ===")
    
    try:
        # 创建 MT5 实例
        exchange = ccxt.mt5({
            'apiKey': '76888962',
            'secret': 'LZ-trade666888',
            'verbose': True,  # 启用详细日志
            'hostname': '43.167.188.220:5000',
            'options': {
                # 'server': '147.160.254.81:443',  # 使用服务器名称
                # 或者
                'host': '18.163.85.196',
                'port': 443,
            },
        })
        
        # 测试连接
        print("\n🔗 Testing connection...")
        try:
            token = exchange.get_token()
            print(f"✅ Connected successfully! Token: {token[:20]}...")
        except Exception as e:
            print(f"❌ Connection failed: {e}")
            return False


        # print("\n💰 Testing ping...")
        # try:
        #     ping = exchange.ping_server()
        #     print(ping)
        # except Exception as e:
        #     print(f"⚠️  ping fetch failed: {e}")


        # 先加载市场数据
        # print("\n📊 Loading markets first...")
        # try:
        #     markets = exchange.load_markets()
        #     print(f"✅ Markets loaded: {len(markets)} symbols")
        # except Exception as e:
        #     print(f"⚠️  Markets load failed: {e}")

        
        # 测试余额
        # print("\n💰 Testing balance...")
        # try:
        #     balance = exchange.fetch_balance()
        #     print(f"✅ Balance fetched: {balance}")
        # except Exception as e:
        #     print(f"⚠️  Balance fetch failed: {e}")
        

        # print("\n💰 Testing AccountDetails...")
        # try:
        #     account_details = exchange.fetch_account_details()
        #     print(f"✅ AccountDetails fetched: {account_details}")
        # except Exception as e:
        #     print(f"⚠️  AccountDetails fetch failed: {e}")

        # 测试交易对
        # print("\n📊 Testing markets...")
        # try:
        #     markets = exchange.fetch_markets()
        #     print(f"✅ Markets fetched: {len(markets)} symbols")
        #     if markets:
        #         for i, market in enumerate(markets[:3]):
        #             print(f"  {i+1}. {market['symbol']}")
        # except Exception as e:
        #     print(f"⚠️  Markets fetch failed: {e}")
        
        # 测试行情
        # print("\n💰 Testing ticker...")
        # try:
        #     ticker = exchange.fetch_ticker('BTCUSD')
        #     print(ticker)
        #     # print(f"✅ Ticker fetched: {ticker['symbol']} - Bid: {ticker['bid']}, Ask: {ticker['ask']}")
        # except Exception as e:
        #     print(f"⚠️  Ticker fetch failed: {e}")

        # print("\n💰 Testing order_book...")
        # try:
        #     order_book = exchange.fetch_ticker('BTCUSD')
        #     print(order_book)
        # except Exception as e:
        #     print(f"⚠️  order_book fetch failed: {e}")

        # 测试时区
        # print("\n💰 Testing server_timezone...")
        # try:
        #     timezone = exchange.server_timezone()
        #     print(timezone)
        #     # print(f"✅ Ticker fetched: {ticker['symbol']} - Bid: {ticker['bid']}, Ask: {ticker['ask']}")
        # except Exception as e:
        #     print(f"⚠️  server_timezone fetch failed: {e}")
        
        # 测试市场观察行情 - 使用不同的符号测试
        # print("\n📊 Testing market watch ticker...")
        # test_symbols = ['XAUUSD+']  # 多试几个符号
        # for symbol in test_symbols:
        #     try:
        #         market_watch = exchange.fetch_ticker_with_market_watch(symbol)
        #         print(f"✅ Market watch ticker for {symbol}:")
        #         print(f"   High: {market_watch['high']}")
        #         print(f"   Low: {market_watch['low']}")
        #         print(f"   Open: {market_watch['open']}")
        #         print(f"   Close: {market_watch['close']}")
        #         break  # 成功一个就停止
        #     except Exception as e:
        #         print(f"⚠️  Market watch for {symbol} failed: {e}")
        
        # 测试K线数据
        # print("\n🕯️ Testing XAUUSD+...")
        # try:
        #     ohlcv = exchange.fetch_ohlcv('XAUUSD+', '1h', limit=3)  # 使用 XAUUSD+ 测试
        #     print(f"✅ XAUUSD+ fetched: {len(ohlcv)} bars")
        #     for i, candle in enumerate(ohlcv):
        #         print(f"   Bar {i+1}: Time={candle[0]}, O={candle[1]}, H={candle[2]}, L={candle[3]}, C={candle[4]}, V={candle[5]}")
        # except Exception as e:
        #     print(f"⚠️  XAUUSD+ failed: {e}")
        
        # 测试订单查询
        # print("\n📋 Testing open orders...")
        # try:
        #     open_orders = exchange.fetch_open_orders()
        #     print(f"✅ Open orders: {len(open_orders)}")
        #     # for order in open_orders:
        #     #     print(f"   Order: {order['ticket']} - {order['symbol']} - {order['orderType']} - {order['lots']}")
        # except Exception as e:
        #     print(f"⚠️  Open orders failed: {e}")
        

        # 测试持仓查询
        # print("\n📊 Testing positions...")
        # try:
        #     positions = exchange.fetch_positions()
        #     print(f"✅ Positions fetched: {len(positions)} positions")
            
        #     for i, position in enumerate(positions):
        #         print(f"\n📈 Position {i+1}:")
        #         print(f"   ID: {position['id']}")
        #         print(f"   Symbol: {position['symbol']}")
        #         print(f"   Side: {position['side']}")
        #         print(f"   Contracts: {position['contracts']}")
        #         print(f"   Entry Price: {position['entryPrice']}")
        #         print(f"   Unrealized PnL: {position['unrealizedPnl']}")
        #         print(f"   Stop Loss: {position['stopLossPrice']}")
        #         print(f"   Take Profit: {position['takeProfitPrice']}")
        #         print(f"   Timestamp: {position['timestamp']}")
        # except Exception as e:
        #     print(f"❌ Positions failed: {e}")
        #     import traceback
        #     traceback.print_exc()

        # 测试单个持仓查询（如果有持仓的话）
        # if positions:
        #     first_symbol = positions[0]['symbol']
        #     print(f"\n🎯 Testing single position for {first_symbol}...")
        #     try:
        #         single_position = exchange.fetch_position(first_symbol)
        #         print(f"✅ Single position fetched:")
        #         print(f"   Symbol: {single_position['symbol']}")
        #         print(f"   Side: {single_position['side']}")
        #         print(f"   Contracts: {single_position['contracts']}")
        #     except Exception as e:
        #         print(f"⚠️  Single position failed: {e}")
        
        # print("\n🎉 Positions test completed!")

        # print("\n🎉 Comprehensive test completed!")
        return True
        
    except Exception as e:
        print(f"❌ Error: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    success = test_mt5_comprehensive()
    sys.exit(0 if success else 1)