package objectstorage

import (
	"context"
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/config"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/client-go/dynamic/fake"
)

func TestNewRunnerReturnsNilWhenNoReportsConfigured(t *testing.T) {
	t.Parallel()

	runner, err := NewRunner(context.Background(), config.ObjectStorageMetricsConfig{}, fake.NewSimpleDynamicClient(runtime.NewScheme()))

	require.NoError(t, err)
	require.Nil(t, runner)
}

func TestNewRunnerRejectsInvalidRefreshInterval(t *testing.T) {
	t.Parallel()

	runner, err := NewRunner(context.Background(), config.ObjectStorageMetricsConfig{
		RefreshInterval: "not-a-duration",
		AWSStorageLensReports: []config.AWSStorageLensReportConfig{{
			Name:         "dev-us-west-2",
			Region:       "us-west-2",
			AccountID:    "790636686964",
			ConfigID:     "tidb-cluster-bucket",
			ReportBucket: "s3-lens-790636686964-us-west-2-an",
		}},
	}, fake.NewSimpleDynamicClient(runtime.NewScheme()))

	require.Nil(t, runner)
	require.ErrorContains(t, err, "parse object storage metrics refresh interval")
}

func TestNewRunnerRejectsNonPositiveRefreshInterval(t *testing.T) {
	t.Parallel()

	runner, err := NewRunner(context.Background(), config.ObjectStorageMetricsConfig{
		RefreshInterval: "0s",
		AWSStorageLensReports: []config.AWSStorageLensReportConfig{{
			Name:         "dev-us-west-2",
			Region:       "us-west-2",
			AccountID:    "790636686964",
			ConfigID:     "tidb-cluster-bucket",
			ReportBucket: "s3-lens-790636686964-us-west-2-an",
		}},
	}, fake.NewSimpleDynamicClient(runtime.NewScheme()))

	require.Nil(t, runner)
	require.ErrorContains(t, err, "refresh interval must be positive")
}
