package service

import (
	"strings"
	"testing"
	"time"

	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/dto"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/engine"
	"github.com/stretchr/testify/require"
)

func TestSlowQueryHealthCheckSQLCanBuildAzureSynapseSQL(t *testing.T) {
	ds, err := dto.ParseDataSource("https://acct.dfs.core.windows.net/container/deltalake/1372813089189381281/slowlogs/")
	require.NoError(t, err)

	analyzer := NewSlowQueryAnalyzer(nil)
	timeRange := dto.TimeRange{
		Start: time.Date(2026, 5, 12, 0, 0, 0, 0, time.UTC),
		End:   time.Date(2026, 5, 12, 1, 0, 0, 0, time.UTC),
	}

	aggregateSQL := analyzer.buildAggregateSQLWithThreshold(
		"1372813089189381281",
		"20260512",
		"20260512",
		timeRange,
		HugeMemoryThreshold,
		int64(SlowQueryTimeThreshold),
	)
	plannedAggregate, err := engine.BuildAzureSynapseSQL(aggregateSQL, "1372813089189381281", ds)
	require.NoError(t, err)
	require.Contains(t, plannedAggregate, "OPENROWSET")
	require.Contains(t, plannedAggregate, "FORMAT = 'DELTA'")
	require.Contains(t, plannedAggregate, "az_slow_query_logs")
	require.Contains(t, plannedAggregate, "20260512")

	detailSQL := analyzer.buildDigestDetailSQL(
		"'20260512'",
		"AND time BETWEEN 1778515200 AND 1778518800",
		HugeMemoryThreshold,
		int64(SlowQueryTimeThreshold),
		[]string{"digest-a"},
		[]string{"digest-b"},
	)
	plannedDetail, err := engine.BuildAzureSynapseSQL(detailSQL, "1372813089189381281", ds)
	require.NoError(t, err)
	require.Contains(t, plannedDetail, "OPENROWSET")
	require.Contains(t, plannedDetail, "az_slow_query_logs")
	require.Contains(t, strings.ToUpper(plannedDetail), "UNION ALL")
	require.Contains(t, strings.ToUpper(plannedDetail), "ROW_NUMBER() OVER")
	require.Contains(t, plannedDetail, "20260512")
}
