package bitgetservice

import (
	log "github.com/go-admin-team/go-admin-core/logger"
)

// ExampleBitgetMarketClient 展示如何使用Bitget公开行情客户端
func ExampleBitgetMarketClient() {
	// 1. 创建Bitget客户端（不需要API密钥用于公开数据）
	client := &BitgetClient{}

	// 初始化公开行情客户端
	marketConfig := DefaultMarketConfig()
	client.marketClient = NewBitgetMarketClient(marketConfig)

	// 2. 设置代理（可选）
	// client.SetMarketProxy("socks5", "127.0.0.1:1080")

	// 3. 设置消息监听器
	msgListener := func(message string) {
		log.Info("收到市场数据: %s", message)
		// 在这里处理市场数据
	}

	errorListener := func(message string) {
		log.Error("收到错误消息: %s", message)
	}

	client.SetMarketListeners(msgListener, errorListener)

	// 4. 连接WebSocket
	if err := client.ConnectMarketData(); err != nil {
		log.Error("连接市场数据失败: %v", err)
		return
	}

	// 5. 订阅现货行情
	tickerListener := func(message string) {
		log.Info("收到BTC-USDT行情: %s", message)
	}

	if err := client.SubscribeSpotTicker("BTCUSDT", tickerListener); err != nil {
		log.Error("订阅现货行情失败: %v", err)
		return
	}

	// 6. 订阅深度数据
	depthListener := func(message string) {
		log.Info("收到BTC-USDT深度: %s", message)
	}

	if err := client.SubscribeSpotDepth("BTCUSDT", depthListener); err != nil {
		log.Error("订阅深度数据失败: %v", err)
		return
	}

	// 7. 订阅成交数据
	tradeListener := func(message string) {
		log.Info("收到BTC-USDT成交: %s", message)
	}

	if err := client.SubscribeSpotTrades("BTCUSDT", tradeListener); err != nil {
		log.Error("订阅成交数据失败: %v", err)
		return
	}

	// 8. 订阅K线数据
	klineListener := func(message string) {
		log.Info("收到BTC-USDT K线: %s", message)
	}

	if err := client.SubscribeKline("BTCUSDT", "1m", klineListener); err != nil {
		log.Error("订阅K线数据失败: %v", err)
		return
	}

	log.Info("所有订阅完成，开始接收数据...")

	// 保持连接（在实际应用中，你可能需要其他方式来保持程序运行）
	// select {}
}

// ExampleBitgetPrivateWebSocket 展示如何使用私有WebSocket（订单、持仓等）
func ExampleBitgetPrivateWebSocket() {
	// 私有数据订阅仍然使用 BitgetWebSocketManager
	// apiKey := "your_api_key"
	// secretKey := "your_secret_key"
	// passphrase := "your_passphrase"

	// // 创建私有WebSocket管理器
	// manager := GetOrCreateBitgetWebSocketManager(apiKey, secretKey, passphrase, "spot")

	// // 启动连接
	// if err := manager.Start(); err != nil {
	// 	log.Error("启动私有WebSocket连接失败: %v", err)
	// 	return
	// }

	// log.Info("私有WebSocket连接成功，可以接收订单、持仓等私有数据")
}

// ExampleMixedUsage 展示混合使用公开和私有订阅
func ExampleMixedUsage() {
	// apiKey := "your_api_key"
	// secretKey := "your_secret_key"
	// passphrase := "your_passphrase"

	// // 1. 创建完整的Bitget客户端
	// client, err := NewBitgetClient(apiKey, secretKey, passphrase)
	// if err != nil {
	// 	log.Error("创建Bitget客户端失败: %v", err)
	// 	return
	// }

	// // 2. 设置公开行情监听器
	// client.SetMarketListeners(
	// 	func(message string) {
	// 		log.Info("公开行情数据: %s", message)
	// 	},
	// 	func(message string) {
	// 		log.Error("公开行情错误: %s", message)
	// 	},
	// )

	// // 3. 连接公开行情
	// if err := client.ConnectMarketData(); err != nil {
	// 	log.Error("连接公开行情失败: %v", err)
	// 	return
	// }

	// // 4. 订阅公开行情
	// if err := client.SubscribeSpotTicker("BTCUSDT", func(message string) {
	// 	log.Info("BTC行情: %s", message)
	// }); err != nil {
	// 	log.Error("订阅行情失败: %v", err)
	// 	return
	// }

	// // 5. 同时使用私有WebSocket（如果需要）
	// privateManager, err := GetOrCreateBitgetWebSocketManager(apiKey, secretKey, passphrase, "spot")
	// if err != nil {
	// 	log.Error("创建私有WebSocket失败: %v", err)
	// 	return
	// }

	// if err := privateManager.Start(); err != nil {
	// 	log.Error("启动私有WebSocket失败: %v", err)
	// 	return
	// }

	// log.Info("混合使用设置完成：公开行情 + 私有数据")
}

// ExampleSubscribeMultipleSymbols 展示如何订阅多个交易对
func ExampleSubscribeMultipleSymbols() {
	client := &BitgetClient{}
	marketConfig := DefaultMarketConfig()
	client.marketClient = NewBitgetMarketClient(marketConfig)

	// 连接
	if err := client.ConnectMarketData(); err != nil {
		log.Error("连接失败: %v", err)
		return
	}

	// 批量订阅多个交易对的行情
	symbols := []string{"BTCUSDT", "ETHUSDT", "ADAUSDT", "DOTUSDT"}

	for _, symbol := range symbols {
		listener := func(sym string) OnReceive {
			return func(message string) {
				log.Info("%s 行情更新: %s", sym, message)
			}
		}(symbol)

		if err := client.SubscribeSpotTicker(symbol, listener); err != nil {
			log.Error("订阅 %s 行情失败: %v", symbol, err)
		} else {
			log.Info("成功订阅 %s 行情", symbol)
		}
	}

	log.Info("批量订阅完成")
}

// ExampleCustomSubscription 展示如何使用自定义订阅
func ExampleCustomSubscription() {
	client := &BitgetClient{}
	marketConfig := DefaultMarketConfig()
	client.marketClient = NewBitgetMarketClient(marketConfig)

	if err := client.ConnectMarketData(); err != nil {
		log.Error("连接失败: %v", err)
		return
	}

	// 自定义订阅请求
	customSubscriptions := []SubscribeReq{
		{
			InstType: "SPOT",
			Channel:  "ticker",
			InstId:   "BTCUSDT",
		},
		{
			InstType: "SPOT",
			Channel:  "books",
			InstId:   "ETHUSDT",
		},
		{
			InstType: "UMCBL", // 合约
			Channel:  "ticker",
			InstId:   "BTCUSDT",
		},
	}

	// 统一的消息处理器
	messageHandler := func(message string) {
		log.Info("自定义订阅数据: %s", message)
		// 在这里根据消息内容进行不同的处理
	}

	// 批量订阅
	if err := client.SubscribeMarketData(customSubscriptions, messageHandler); err != nil {
		log.Error("自定义订阅失败: %v", err)
		return
	}

	log.Info("自定义订阅完成")
}
