package test

import (
	"cicv-data-closedloop/common/util"
	"cicv-data-closedloop/tools/plugin-compile/package/config"
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"log"
	"testing"
)

func TestCompareSize(t *testing.T) {
	config.InitOss(true)
	// 1 下载oss文件到本地
	err := config.OssBucket.GetObjectToFile("1709907833304/demo.py", "D:\\demo.py")
	if err != nil {
		panic(err)
	}
	// 2 获取oss的Content-Type文件大小
	size, _ := util.GetOSSFileSize(config.OssBucket, "1709907833304/demo.py")
	fmt.Println("云上文件大小为", size)
	// 3 获取本地文件大小
	fileSize, err := util.GetFileSize("D:\\demo.py")
	fmt.Println("本地文件大小为", fileSize)
	// 4 比较大小
}

func TestDeleteDir(t *testing.T) {
	// 配置 OSS 客户端
	endpoint := "http://oss-cn-beijing-gqzl-d01-a.ops.gqzl-cloud.com/" // 替换为实际的 OSS Endpoint
	accessKeyID := "nT7CCrjL6pcYGej6"                                  // 替换为实际的 AccessKeyID
	accessKeySecret := "OPHAxk2c2YbG530ADx6KZi2PbcWHr7"                // 替换为实际的 AccessKeySecret
	bucketName := "xinqi"                                              // 替换为实际的 Bucket 名称
	prefix := "1"                                                      // 替换为实际的前缀

	// 创建 OSS 客户端
	client, err := oss.New(endpoint, accessKeyID, accessKeySecret)
	if err != nil {
		log.Fatalf("Error creating OSS client: %v", err)
	}

	// 获取 Bucket
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Error getting bucket: %v", err)
	}

	// 列出指定前缀的所有对象
	marker := ""
	for {
		lsRes, err := bucket.ListObjects(oss.Prefix(prefix), oss.Marker(marker))
		if err != nil {
			log.Fatalf("Error listing objects: %v", err)
		}

		// 删除列出的对象
		var objectsToDelete []string
		for _, object := range lsRes.Objects {
			objectsToDelete = append(objectsToDelete, object.Key)
		}

		if len(objectsToDelete) > 0 {
			_, err = bucket.DeleteObjects(objectsToDelete, oss.DeleteObjectsQuiet(true))
			if err != nil {
				log.Fatalf("Error deleting objects: %v", err)
			}
			fmt.Printf("Deleted %d objects: %v\n", len(objectsToDelete), objectsToDelete)
		}

		// 如果没有更多对象,退出循环
		if !lsRes.IsTruncated {
			break
		}
		marker = lsRes.NextMarker
	}

	fmt.Println("Finished deleting all objects with prefix.")
}