package utils

import (
	"context"
	"fmt"
	"github.com/qiniu/api.v7/v7/auth/qbox"
	"github.com/qiniu/api.v7/v7/storage"
	"os"
	"path"
	"path/filepath"
	"time"
	"zhenyihuibao/conf"
	"zhenyihuibao/pkg/logging"
)

type UploadUtil struct {
}

func init(){

}

func (this *UploadUtil) CreateDateDir() string {
	basePath, _ := os.Getwd()
	folderName := time.Now().Format("20060102")
	folderPath := filepath.Join(basePath, conf.Cnf.AppUploads, folderName)
	if _, err := os.Stat(folderPath); os.IsNotExist(err) {
		os.Mkdir(folderPath, 0755)
		os.Chmod(folderPath, 0755)
	}
	return folderPath
}

func (this *UploadUtil) GetNewFileNamePath(originFile string) (relativePath string, absolutePath string) {
	fileSuffix := path.Ext(originFile)
	curTime 	:= time.Now().UnixNano()
	logging.MyLogger.Infof("当前时间戳", curTime)
	dir 		:= this.CreateDateDir()
	logging.MyLogger.Infof("当前dir", dir)
	relativePath 	= fmt.Sprintf("%v/%v%v", conf.Cnf.AppUploads, curTime, fileSuffix)
	absolutePath 	= fmt.Sprintf("%v/%v%v", dir, curTime, fileSuffix)
	return
}


func (this *UploadUtil) ToQiniu(localFile string,fileName string) (err error){
	accessKey :=  conf.Cnf.QiNiuAccessKey
	secretKey :=  conf.Cnf.QiNiuSecretKey
	bucket :=  conf.Cnf.QiNiuBucket
	key := fileName
	putPolicy := storage.PutPolicy{
		Scope: bucket,
	}
	mac := qbox.NewMac(accessKey, secretKey)
	upToken := putPolicy.UploadToken(mac)

	cfg := storage.Config{}
	switch  conf.Cnf.QiNiuZone {
	case "HUABEI":
		cfg.Zone = &storage.ZoneHuabei
	case "HUADONG":
		cfg.Zone = &storage.ZoneHuadong
	case "BEIMEI":
		cfg.Zone = &storage.ZoneBeimei
	case "HUANAN":
		cfg.Zone = &storage.ZoneHuanan
	case "XINJIAPO":
		cfg.Zone = &storage.ZoneXinjiapo
	default:
		cfg.Zone = &storage.ZoneHuabei
	}
	cfg.UseHTTPS = false
	cfg.UseCdnDomains = false

	formUploader := storage.NewFormUploader(&cfg)
	ret := storage.PutRet{}

	putExtra := storage.PutExtra{
		Params: map[string]string{
			//"x:name": "github logo",
		},
	}
	err = formUploader.PutFile(context.Background(), &ret, upToken, key, localFile, &putExtra)
	if err != nil {
		logging.MyLogger.Infof("message","service.QiNiu upload file","err",err.Error())
		return
	}
	logging.MyLogger.Infof("message","service.QiNiu upload file","end","succeed")
	return
}