package okx

import (
	"encoding/csv"
	"encoding/json"
	"strings"
)

// TickerList 封装Ticker数组并提供序列化方法
type TickerList struct {
	Tickers []*Ticker
}

// ToJson 将Ticker数组序列化为JSON字符串
func (tl *TickerList) ToJson() (string, error) {
	jsonData, err := json.Marshal(tl.Tickers)
	if err != nil {
		return "", err
	}
	return string(jsonData), nil
}

// ToCsv 将Ticker数组序列化为CSV字符串
func (tl *TickerList) ToCsv() (string, error) {
	var sb strings.Builder
	writer := csv.NewWriter(&sb)

	// 写入CSV头
	header := []string{
		"InstType", "InstID", "Last", "LastSz", "AskPx", "AskSz",
		"BidPx", "BidSz", "Open24h", "High24h", "Low24h",
		"VolCcy24h", "Vol24h", "Ts", "SodUtc0", "SodUtc8",
	}
	if err := writer.Write(header); err != nil {
		return "", err
	}

	// 写入数据
	for _, ticker := range tl.Tickers {
		record := []string{
			ticker.InstType,
			ticker.InstID,
			ticker.Last,
			ticker.LastSz,
			ticker.AskPx,
			ticker.AskSz,
			ticker.BidPx,
			ticker.BidSz,
			ticker.Open24h,
			ticker.High24h,
			ticker.Low24h,
			ticker.VolCcy24h,
			ticker.Vol24h,
			ticker.Ts,
			ticker.SodUtc0,
			ticker.SodUtc8,
		}
		if err := writer.Write(record); err != nil {
			return "", err
		}
	}

	writer.Flush()
	if err := writer.Error(); err != nil {
		return "", err
	}

	return sb.String(), nil
}