package store

import (
	"testing"

	dto "github.com/prometheus/client_model/go"
	"github.com/tidbcloud/serverless-metering/pkg/config"
	"github.com/tj/assert"
	"google.golang.org/protobuf/proto"
)

// skip this test because it's hard to handle timestamp
func SkipTestRcuStore(t *testing.T) {
	config.InitMockConfig()
	store, err := NewRcuStore()
	assert.Nil(t, err)
	var startTs int64 = 1735660800
	for i := 0; i < 1000; i++ {
		_ = store.WriteMetrics(map[string]string{}, &dto.MetricFamily{
			Name: proto.String("resource_manager_resource_unit_read_request_unit_sum"),
			Type: dto.MetricType_COUNTER.Enum(),
			Metric: []*dto.Metric{
				{
					Label: []*dto.LabelPair{
						{Name: proto.String("name"), Value: proto.String("1")},
					},
					// 1 point per 10 seconds
					Counter: &dto.Counter{
						Value: proto.Float64(float64(i * 1000)),
					},
				},
				{
					Label: []*dto.LabelPair{
						{Name: proto.String("name"), Value: proto.String("2")},
					},
					// 1 point per 10 seconds
					Counter: &dto.Counter{
						Value: proto.Float64(float64(i * 2 * 1000)),
					},
				},
			},
		})
	}
	usages, err := store.CalRcuUsages([]uint32{}, startTs, startTs+int64(60*10), false)
	assert.Nil(t, err)
	assert.Equal(t, 2, len(usages))
	assert.Equal(t, usages[0].KeyspaceID, "1")
	assert.Equal(t, len(usages[0].Values), 10)
	assert.Equal(t, usages[0].Values[8], int64(100))
	assert.Equal(t, usages[0].Values[9], int64(100))
	assert.Equal(t, usages[1].KeyspaceID, "2")
	assert.Equal(t, len(usages[1].Values), 10)
	assert.Equal(t, usages[1].Values[8], int64(200))
	assert.Equal(t, usages[1].Values[9], int64(200))
}
