package export

import (
	"testing"

	"github.com/stretchr/testify/require"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/infra/repoimpl/schema"
)

func TestSchemaExportToRegionalExportPreservesSnapshotTSO(t *testing.T) {
	const snapshotTSO = uint64(448266862624768042)

	got := SchemaExportToRegionalExport(&schema.Export{
		ExportId:    "export-1",
		ClusterId:   "100",
		SnapshotTso: snapshotTSO,
	})

	require.Equal(t, snapshotTSO, got.GetSnapshotTso())
}

func TestSchemaExportToRegionalExportPreservesCSVDialect(t *testing.T) {
	dialect := globalngv1.ExportOptions_ExportCSVDialect_BIGQUERY.String()

	got := SchemaExportToRegionalExport(&schema.Export{
		ExportOptions: &schema.ExportOptions{
			FileType:  globalngv1.ExportOptions_CSV.String(),
			CSVFormat: &schema.ExportOptionsCSVFormat{Dialect: &dialect},
		},
	})

	require.Equal(t, globalngv1.ExportOptions_ExportCSVDialect_BIGQUERY.String(), got.GetExportOptions().GetCsvFormat().GetDialect().String())
}

func TestSchemaExportToRegionalExportPreservesDumplingOutputOptions(t *testing.T) {
	escapeBackslash := false
	got := SchemaExportToRegionalExport(&schema.Export{
		ExportOptions: &schema.ExportOptions{
			FileType:        globalngv1.ExportOptions_PARQUET.String(),
			Compression:     globalngv1.ExportOptions_NONE.String(),
			EscapeBackslash: &escapeBackslash,
			Filter: &schema.ExportOptionsFilter{
				Table: &schema.ExportOptionsFilterTable{Partitions: []string{"p0", "p1"}},
			},
			ParquetFormat: &schema.ExportOptionsParquetFormat{
				Compression: globalngv1.ExportParquetCompressionType_ZSTD.String(),
			},
		},
	})

	require.Equal(t, "PARQUET", got.GetExportOptions().GetFileType().String())
	require.Equal(t, []string{"p0", "p1"}, got.GetExportOptions().GetFilter().GetTable().GetPartitions())
	require.NotNil(t, got.GetExportOptions().EscapeBackslash)
	require.False(t, got.GetExportOptions().GetEscapeBackslash())
	require.Equal(t, "ZSTD", got.GetExportOptions().GetParquetFormat().GetCompression().String())
}
