package facade_imp

import (
	"fmt"
	"strings"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/serverless-service/internal/domain/constant"
)

func TestExportPromQLTemplateFormatting(t *testing.T) {
	// Verify that all export PromQL templates have the correct number of %s placeholders
	// and that fmt.Sprintf produces valid PromQL (no %!s(MISSING)).
	exportID := "exp-test-export-id"

	for metricType, tmpl := range sku2ExportPromQL {
		t.Run(metricType.String(), func(t *testing.T) {
			// Count %s placeholders
			count := strings.Count(tmpl, "%s")
			assert.Equal(t, 2, count, "ExportRequestUnitPromQL should have exactly 2 %%s placeholders")

			// Format with the correct number of args
			result := fmt.Sprintf(tmpl, exportID, exportID)

			// Must not contain Go format error markers
			assert.NotContains(t, result, "%!", "formatted PromQL should not contain Go format error markers")
			assert.NotContains(t, result, "MISSING", "formatted PromQL should not contain MISSING")

			// Both occurrences should be replaced
			assert.Equal(t, 2, strings.Count(result, exportID),
				"exportID should appear exactly 2 times in the formatted PromQL")
		})
	}
}

func TestExportPromQLContainsExpectedMetrics(t *testing.T) {
	tmpl := ExportRequestUnitPromQL
	exportID := "exp-45cwlta7pfarvhaogkmsheolpa"

	result := fmt.Sprintf(tmpl, exportID, exportID)

	assert.Contains(t, result, "resource_manager_resource_unit_read_request_unit_sum")
	assert.Contains(t, result, "resource_manager_resource_unit_sql_layer_request_unit_sum")
	assert.Contains(t, result, fmt.Sprintf("name=%q", exportID))
}

func TestSku2ExportPromQLMapCompleteness(t *testing.T) {
	// Ensure the map contains the expected metric type
	_, ok := sku2ExportPromQL[constant.MetricTypeExportRU]
	assert.True(t, ok, "sku2ExportPromQL should contain MetricTypeExportRU")
}
