package initialize

import (
	"ffie-admin/server/global"

	"github.com/btcsuite/btcd/rpcclient"
	"go.uber.org/zap"
)

// connectToBTCNode 连接到指定地址的 BTC 节点
func connectToBTCNode(addr string) error {
	// 创建客户端配置
	connCfg := &rpcclient.ConnConfig{
		Host:         addr,
		User:         global.GVA_CONFIG.BTC.RPCUsername, // 替换为实际的 RPC 用户名
		Pass:         global.GVA_CONFIG.BTC.RPCPassword, // 替换为实际的 RPC 密码
		HTTPPostMode: true,                              // BTC RPC 服务器使用 HTTP POST 模式
		DisableTLS:   true,                              // 如果使用非 TLS 连接
	}

	// 创建客户端实例
	client, err := rpcclient.New(connCfg, nil)
	if err != nil {
		return err
	}

	// 尝试连接节点
	if err := client.Ping(); err != nil {
		return err
	}

	// 连接成功，将客户端赋值给全局变量
	global.GVA_BTCCli = client
	return nil
}

// BTCNodeInit 初始化 BTC 节点
func BTCNodeInit() {

	btcConfig := global.GVA_CONFIG.BTC
	if !btcConfig.Use {
		global.GVA_LOG.Warn("未开启 BTC 节点")
		return
	}
	if len(btcConfig.NodeAddresses) == 0 {
		global.GVA_LOG.Warn("未配置 BTC 节点地址列表")
		return
	}

	global.GVA_LOG.Info("开始初始化 BTC 节点", zap.Strings("节点地址", btcConfig.NodeAddresses))
	// 尝试连接第一个节点
	for _, addr := range btcConfig.NodeAddresses {
		if err := connectToBTCNode(addr); err != nil {
			global.GVA_LOG.Error("连接 BTC 节点失败", zap.String("地址", addr), zap.Error(err))
		} else {
			global.GVA_LOG.Info("成功连接到 BTC 节点", zap.String("地址", addr))
			break // 连接成功则退出循环
		}
	}
	global.GVA_LOG.Info("BTC 节点初始化完成")
}
