package export

import (
	"testing"

	"github.com/tidbcloud/tiinf/sdk/auditlog"

	openapingv1beta2 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_cloud_open_api/nextgen/v1beta2"
)

func TestCreateExportAuditLogEventType(t *testing.T) {
	tests := []struct {
		name    string
		storage *openapingv1beta2.CloudStorage
		want    auditlog.EventType
	}{
		{
			name:    "nil storage",
			storage: nil,
			want:    0,
		},
		{
			name: "unspecified storage",
			storage: &openapingv1beta2.CloudStorage{
				Type: openapingv1beta2.CloudStorageType_CLOUD_STORAGE_TYPE_UNSPECIFIED,
			},
			want: 0,
		},
		{
			name: "s3",
			storage: &openapingv1beta2.CloudStorage{
				Type: openapingv1beta2.CloudStorageType_S3,
			},
			want: auditlog.EventExportDataToAWS,
		},
		{
			name: "gcs",
			storage: &openapingv1beta2.CloudStorage{
				Type: openapingv1beta2.CloudStorageType_GCS,
			},
			want: auditlog.EventExportDataToGCP,
		},
		{
			name: "azure blob",
			storage: &openapingv1beta2.CloudStorage{
				Type: openapingv1beta2.CloudStorageType_AZURE_BLOB,
			},
			want: auditlog.EventExportDataToAzure,
		},
		{
			name: "oss",
			storage: &openapingv1beta2.CloudStorage{
				Type: openapingv1beta2.CloudStorageType_OSS,
			},
			want: auditlog.EventExportDataToAlibabaCloud,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := createExportAuditLogEventType(tt.storage)
			if got != tt.want {
				t.Fatalf("createExportAuditLogEventType() = %v, want %v", got, tt.want)
			}
		})
	}
}
