package v2rayapi

// 极简 StatsService 客户端。消息定义(stats.pb.go)直接从 sing-box
// experimental/v2rayapi 原样 vendor(wire 保证一致);此处只手写 QueryStats 调用。
//
// 注意:sing-box 服务端把 gRPC ServiceName 覆盖成了 v2ray 规范名
//   "v2ray.core.app.stats.command.StatsService"(见 sing-box stats.go),
// 而生成代码里的常量是 "experimental.v2rayapi.StatsService"。直接抄生成的
// client 会调错方法路径,故这里硬编码服务端真正注册的规范全名。

import (
	"context"

	"google.golang.org/grpc"
)

const queryStatsFullMethod = "/v2ray.core.app.stats.command.StatsService/QueryStats"

// StatsClient 是 v2ray StatsService 的最小客户端(只用 QueryStats)。
type StatsClient struct {
	cc grpc.ClientConnInterface
}

// NewStatsClient 包一个已建立的 gRPC 连接。
func NewStatsClient(cc grpc.ClientConnInterface) *StatsClient {
	return &StatsClient{cc: cc}
}

// QueryStats 按 pattern 取计数器;reset=true 时取值并清零(天然给出窗口 delta)。
func (c *StatsClient) QueryStats(ctx context.Context, in *QueryStatsRequest, opts ...grpc.CallOption) (*QueryStatsResponse, error) {
	out := new(QueryStatsResponse)
	if err := c.cc.Invoke(ctx, queryStatsFullMethod, in, out, opts...); err != nil {
		return nil, err
	}
	return out, nil
}
