package cloud_storage

import (
	"testing"

	"github.com/aws/aws-sdk-go-v2/aws"
	. "github.com/onsi/gomega"
	"github.com/tidbcloud/pkgv2/bizerr"
)

func TestParseGCSParams(t *testing.T) {
	g := NewGomegaWithT(t)
	testCases := []struct {
		uri            string
		expectedBucket string
		expectedPrefix *string
		expectedError  bizerr.BizError
	}{
		{
			uri:            "gs://test/",
			expectedBucket: "test",
			expectedPrefix: nil,
		},
		{
			uri:            "gs://test/test.csv",
			expectedBucket: "test",
			expectedPrefix: aws.String("test.csv"),
		},
		{
			uri:            "gs://test/benchmark/",
			expectedBucket: "test",
			expectedPrefix: aws.String("benchmark/"),
		},
		{
			uri:            "gs://tidbcloud-samples/hello?world/usern#ame.csv",
			expectedBucket: "tidbcloud-samples",
			expectedPrefix: aws.String("hello?world/usern#ame.csv"),
		},
		{
			uri:           "gs://",
			expectedError: bizerr.New(bizerr.ErrCodeParams, "Invalid URL: Bucket name is missing or improperly specified."),
		},
	}

	for _, tc := range testCases {
		bucket, prefix, err := parseGCSParams(tc.uri)
		if tc.expectedError == nil {
			g.Expect(err).To(BeNil())
			g.Expect(bucket).To(Equal(tc.expectedBucket))
			if tc.expectedPrefix == nil {
				g.Expect(prefix).To(BeNil())
			} else {
				g.Expect(prefix).To(Equal(tc.expectedPrefix))
			}
		} else {
			g.Expect(err).NotTo(BeNil())
			g.Expect(err.ErrMsg()).To(Equal(tc.expectedError.ErrMsg()))
		}
	}
}
