package lightning

import (
	"context"
	"fmt"
	"testing"

	"github.com/pingcap/tidb/br/pkg/storage"
)

func Test_azblobObjectLister_ListObjects(t *testing.T) {
	type fields struct {
		blobStorage *storage.AzureBlobStorage
	}
	type args struct {
		ctx context.Context
		req *ListRequest
	}
	ctx := context.TODO()
	sourceUrl := "azblob://import-test/?account-name=tidbbackup&sas-token=sv%3D2022-11-02%26ss%3Db%26srt%3Dco%26sp%3Drwltfx%26se%3D2024-10-18T16%3A58%3A51Z%26st%3D2024-09-18T08%3A58%3A51Z%26spr%3Dhttps%26sig%3D8iYvWnqWbheRyVA4rTFNoGQqZrN1TiWZ%252FAPdJZ1U0RY%253D"
	u, err := storage.ParseBackend(sourceUrl, nil)
	if err != nil {
		t.Fatalf("ParseBackend = %v, err %v", u, err)
	}
	store, err := storage.New(ctx, u, &storage.ExternalStorageOptions{})
	if err != nil {
		t.Fatalf("New Storage = %v, err %v", store, err)
	}
	tests := []struct {
		name    string
		fields  fields
		args    args
		wantErr bool
	}{
		{
			name: "OK",
			fields: fields{
				blobStorage: store.(*storage.AzureBlobStorage),
			},
			args: args{
				ctx: ctx,
				req: &ListRequest{
					MaxKeys: 110,
				},
			},
			wantErr: false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			l := &azblobObjectLister{
				blobStorage: tt.fields.blobStorage,
			}
			got, err := l.ListObjects(tt.args.ctx, tt.args.req)
			if (err != nil) != tt.wantErr {
				t.Errorf("azblobObjectLister.ListObjects() error = %v, wantErr %v", err, tt.wantErr)
				return
			}
			for {
				result, err := got.Next()
				if err != nil {
					if err == errListDone {
						t.Log("ListObject Done")
					} else {
						t.Errorf("ListObject Next failed: %v", err)
					}
					break
				}
				fmt.Println(*result)
				t.Logf("object: %+v", *result)
			}
		})
	}
}
