package util

import (
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"os"
	"strconv"
)

// LimitUpload 限速上传
// limitBit 默认单位为bit/s。比如 41943040 为 5 MB/s。
func LimitUpload(bucket *oss.Bucket, limitBit int64, ossObjectKey string, localFilePath string) error {
	fd, err := os.Open(localFilePath)
	if err != nil {
		return err
	}
	defer fd.Close()
	if err = bucket.PutObject(ossObjectKey, fd, oss.TrafficLimitHeader(limitBit)); err != nil {
		return err
	}
	return nil
}

// LimitDownload 限速下载
// limitBit 默认单位为bit/s。比如 41943040 为 5 MB/s。
func LimitDownload(bucket *oss.Bucket, limitBit int64, ossObjectKey string, localFilePath string) error {
	if err := CreateParentDir(localFilePath); err != nil {
		return err
	}
	if err := bucket.GetObjectToFile(ossObjectKey, localFilePath, oss.TrafficLimitHeader(limitBit)); err != nil {
		return err
	}
	return nil
}

func GetOSSFileSize(bucket *oss.Bucket, objectName string) (int, error) {
	// 获取文件的元信息
	attrs, err := bucket.GetObjectDetailedMeta(objectName)
	if err != nil {
		return 0, err
	}

	// 从元信息中获取文件大小
	size, err := strconv.Atoi(attrs.Get("Content-Length"))
	if err != nil {
		return 0, err
	}
	return size, nil
}