package ws

// HOW TO RUN
// go test ws_cli.go ws_op.go ws_contants.go utils.go ws_priv_channel.go ws_priv_channel_Accout_test.go -v

import (
	"fmt"
	"log"
	"testing"
	"time"
)

const (
	TRADE_ACCOUNT = iota
	ISOLATE_ACCOUNT
	CROSS_ACCOUNT
	CROSS_ACCOUNT_B
)

func prework_pri(t int) *WsClient {
	// 模拟环境
	ep := "wss://wsaws.okex.com:8443/ws/v5/private"
	var apikey, passphrase, secretKey string
	// 把账号密码写这里
	switch t {
	case TRADE_ACCOUNT:
		apikey = "fe468418-5e40-433f-8d04-04951286d417"
		passphrase = "M4pw71Id"
		secretKey = "D6D74DF9DD60A25BE2B27CA71D8F814D"
	case ISOLATE_ACCOUNT:
		apikey = "fe468418-5e40-433f-8d04-04951286d417"
		passphrase = "M4pw71Id"
		secretKey = "D6D74DF9DD60A25BE2B27CA71D8F814D"
	case CROSS_ACCOUNT:
		apikey = "fe468418-5e40-433f-8d04-04951286d417"
		passphrase = "M4pw71Id"
		secretKey = "D6D74DF9DD60A25BE2B27CA71D8F814D"
	case CROSS_ACCOUNT_B:
		apikey = "fe468418-5e40-433f-8d04-04951286d417"
		passphrase = "M4pw71Id"
		secretKey = "D6D74DF9DD60A25BE2B27CA71D8F814D"
	}

	r, err := NewWsClient(ep)
	if err != nil {
		log.Fatal(err)
	}

	err = r.Start()
	if err != nil {
		log.Fatal(err)
	}

	var res bool
	start := time.Now()
	res, _, err = r.Login(apikey, secretKey, passphrase)
	if res {
		usedTime := time.Since(start)
		fmt.Println("登录成功!", usedTime.String())
	} else {
		log.Fatal("登录失败!", err)
	}
	fmt.Println(apikey, secretKey, passphrase)
	return r
}

// 账户频道 测试
func TestAccout(t *testing.T) {
	r := prework_pri(CROSS_ACCOUNT)
	var res bool
	var err error

	var args []map[string]string
	arg := make(map[string]string)
	arg["ccy"] = "BTC"
	args = append(args, arg)
	fmt.Println("args: ", args)
	start := time.Now()
	res, _, err = r.PrivAccout(OP_SUBSCRIBE, args)
	if res {
		usedTime := time.Since(start)
		fmt.Println("订阅所有成功!", usedTime.String())
	} else {
		fmt.Println("订阅所有成功!", err)
		t.Fatal("订阅所有成功!", err)
	}

	time.Sleep(100 * time.Second)
	start = time.Now()
	// res, _, err = r.PrivAccout(OP_UNSUBSCRIBE, args)
	// if res {
	// usedTime := time.Since(start)
	// fmt.Println("取消订阅所有成功!", usedTime.String())
	// } else {
	// fmt.Println("取消订阅所有失败!", err)
	// t.Fatal("取消订阅所有失败!", err)
	// }

}