package aliyun

import (
	//"bufio"
	//"bytes"
	//"crypto/md5"
	//"fmt"
	//"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"github.com/aliyun/aliyun-sts-go-sdk/sts"
	"github.com/rs/zerolog/log"
	//"io"
	//"io/ioutil"
	//"net/http"
	//"path"
)

const (
	//AliyunAccessKeyID     = "LTAI5tH6oCpPPRufyxqYEHk1"
	//AliyunAccessKeySecret = "SqKNm5YWXk097x5mpRMUjEAfEjcYbS"
	//AliyunRoleArn         = "acs:ram::1069419146450879:role/irui"
	//AliyunOssBucketName   = "minghui-oss"

	AliyunAccessKeyID     = "LTAI5t9sZ7ZhEirYKETbEhbJ"
	AliyunAccessKeySecret = "mtDxepQAAhzQ7g2aQsB5Hq2339ryAI"
	AliyunRoleArn         = "acs:ram::1069419146450879:role/aliyunoss"
	AliyunOssBucketName   = "minghui-oss"
	AliyunOssUrl          = "https://minghui-oss.oss-cn-shenzhen.aliyuncs.com/"
)

type UploadInfo struct {
	AccessKeyId     string `json:"access_key_id"`
	AccessKeySecret string `json:"access_key_secret"`
	Expiration      int64  `json:"expiration"`
	SecurityToken   string `json:"security_token"`
	BucketName      string `json:"bucket_name"`
}

// uid用来区分sts授予了哪个用户，可以传将用户uid转为string传入
// 传入的字符串长度必须大于1
// stsToken的默认有效时间为一小时
func GenStsToken(uid string) (*UploadInfo, error) {

	log.Info().Msgf("config.Config.AliyunAccessKeyID:%s", AliyunAccessKeyID)
	log.Info().Msgf("config.Config.AliyunAccessKeySecret:%s", AliyunAccessKeySecret)
	log.Info().Msgf("config.Config.AliyunRoleArn:%s", AliyunRoleArn)
	stsClient := sts.NewClient(AliyunAccessKeyID, AliyunAccessKeySecret, AliyunRoleArn, uid)

	resp, err := stsClient.AssumeRole(3600)
	if err != nil {
		return nil, err
	}
	log.Error().Msgf("err:%v", err)
	log.Info().Msgf("AssumeRole:resp:%v", resp)
	uploadInfo := &UploadInfo{
		AccessKeyId:     resp.Credentials.AccessKeyId,
		AccessKeySecret: resp.Credentials.AccessKeySecret,
		Expiration:      resp.Credentials.Expiration.Unix(),
		SecurityToken:   resp.Credentials.SecurityToken,
		BucketName:      AliyunOssBucketName,
	}
	return uploadInfo, nil
}

//func UploadImageToOss(imgUrl string) (string, error) {
//	res, err := http.Get(imgUrl)
//	if err != nil {
//		log.Info().Msgf("err=%v", err)
//		return "", err
//	}
//	defer res.Body.Close()
//
//	// 上传oss
//	endpoint := "oss-eu-central-1.aliyuncs.com"
//	accessKeyId := config.Config.AliyunAccessKeyID
//	accessKeySecret := config.Config.AliyunAccessKeySecret
//	bucketName := config.Config.AliyunOssBucketName
//
//	client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
//	if err != nil {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	bucket, err := client.Bucket(bucketName)
//	if err != nil {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	// 获得get请求响应的reader对象
//	reader := bufio.NewReaderSize(res.Body, 1000*1024)
//	readAll, err := ioutil.ReadAll(reader)
//	if err != nil {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	uploadReader := bytes.NewReader(readAll)
//	md5Reader := bytes.NewReader(readAll)
//
//	md5Handle := md5.New()                 //创建 md5 句柄
//	_, err = io.Copy(md5Handle, md5Reader) //将文件内容拷贝到 md5 句柄中
//	if nil != err {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	image := md5Handle.Sum(nil)
//	imageKey := fmt.Sprintf("%x", string(image)) + path.Ext(imgUrl)
//	//log.Debug().Msgf("mdMD5:%s", string(imageKey))
//
//	err = bucket.PutObject(imageKey, uploadReader)
//	if err != nil {
//		log.Info().Msgf("err=%v", err)
//		return "", err
//	}
//
//	return imageKey, nil
//}

//func UploadFileToOss(filePath string) (string, error) {
//	buf, err := ioutil.ReadFile(filePath)
//	if err != nil {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	md5Reader := bytes.NewReader(buf)
//	md5Handle := md5.New()                 //创建 md5 句柄
//	_, err = io.Copy(md5Handle, md5Reader) //将文件内容拷贝到 md5 句柄中
//	if nil != err {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	image := md5Handle.Sum(nil)
//	key := fmt.Sprintf("%x", string(image))
//
//	// 上传oss
//	endpoint := "oss-eu-central-1.aliyuncs.com"
//	accessKeyId := config.Config.AliyunAccessKeyID
//	accessKeySecret := config.Config.AliyunAccessKeySecret
//	bucketName := config.Config.AliyunOssBucketName
//
//	client, err := oss.New(endpoint, accessKeyId, accessKeySecret)
//	if err != nil {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	bucket, err := client.Bucket(bucketName)
//	if err != nil {
//		log.Error().Msgf("err=%v", err)
//		return "", err
//	}
//
//	uploadReader := bytes.NewReader(buf)
//	err = bucket.PutObject(key, uploadReader)
//	if err != nil {
//		log.Info().Msgf("err=%v", err)
//		return "", err
//	}
//
//	return key, nil
//}
