package main

import (
	"context"
	"fmt"
	"gdyb/models"
	_ "gdyb/routers"
	"github.com/astaxie/beego"
	"github.com/qiniu/api.v7/auth/qbox"
	"github.com/qiniu/api.v7/storage"
	"os"
	"strconv"
	"time"
)

func init() {
	//service.ConnectDB()
	//org_id, _ := beego.AppConfig.Int64("org_id")
	//miConfig, _ := service.FindMedicalInsuranceInfo(org_id)
	//CreateLog(miConfig)
	//UploadLog(miConfig)

}
func main() {
	beego.Run()
}

func CreateLog(miConfig models.MedicalInsuranceOrgConfig) {
	Mkdir(miConfig.OrgName + "日志")
	//org_id,_ := beego.AppConfig.Int("org_id")
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")
	file := strconv.FormatInt(miConfig.UserOrgId, 10) + "_" + year + month + day + "_log"
	file_name := file + ".txt"
	file_path := miConfig.OrgName + "日志" + "/" + file_name
	exist, _ := PathExists(file_path)
	if exist { //存在
		fmt.Println("存在")
		f, err := os.OpenFile(file_path, os.O_WRONLY, 0644)
		if err != nil {
			fmt.Println("read fail")
		}
		content := "\r\r\r"
		n, _ := f.Seek(0, 2)
		_, err = f.WriteAt([]byte(content), n)

	} else { //不存在
		fmt.Println("文件不存在,创建文件")
		f, err := os.Create(miConfig.OrgName + "日志" + "/" + file_name)
		defer f.Close()
		if err != nil {
		} else {
			_, err = f.Write([]byte("记录日志"))
		}
	}

}
func UploadLog(miConfig models.MedicalInsuranceOrgConfig) {
	//获取七牛云上的文件信息,不存在则表示没上传到七牛云,上传昨天日志信息
	nTime := time.Now()
	yesTime := nTime.AddDate(0, 0, -1)
	file_key := strconv.FormatInt(miConfig.UserOrgId, 10) + "_" + yesTime.Format("20060102") + "_log.txt"
	mac := qbox.NewMac(beego.AppConfig.String("qiniu_accesskey"), beego.AppConfig.String("qiniu_secretkey"))
	cfg := storage.Config{
		// 是否使用https域名进行资源管理
		UseHTTPS: true,
	}
	// 指定空间所在的区域,如果不指定将自动探测
	// 如果没有特殊需求,默认不需要指定
	//cfg.Zone=&storage.ZoneHuabei
	bucketManager := storage.NewBucketManager(mac, &cfg)
	bucket := beego.AppConfig.String("qiniu_bucket")
	key := file_key
	file, sErr := bucketManager.Stat(bucket, key)
	fmt.Println(file)
	fmt.Println(sErr)
	fmt.Println(miConfig.OrgName + "日志" + "/" + file_key)

	if sErr != nil {
		fmt.Println("七牛云上文件不存在,上传到七牛云")
		//判断本地文件是否存在,存在则执行上传操作
		exist, _ := PathExists(miConfig.OrgName + "日志" + "/" + file_key)
		if exist {
			upload_qiniu(miConfig.OrgName+"日志"+"/"+file_key, file_key)
		} else {
			fmt.Println("本地文件不存在")

		}
	} else {
		fmt.Println("七牛云文件存在")
	}

}
func Mkdir(dir string) {
	// 创建文件夹
	exist, err := PathExists(dir)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		if exist {
			fmt.Println(dir + "文件夹已存在!")
		} else {
			// 文件夹名称,权限
			err := os.Mkdir(dir, os.ModePerm)
			if err != nil {
				fmt.Println(dir+"文件夹创建失败:", err.Error())
			} else {
				fmt.Println(dir + "文件夹创建成功!")
			}
		}
	}
}
func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}
func upload_qiniu(filePath string, keys string) {
	key := keys
	//上传凭证,关于凭证这块大家可以去看看官方文档
	putPolicy := storage.PutPolicy{
		Scope: beego.AppConfig.String("qiniu_bucket"),
	}
	mac := qbox.NewMac(beego.AppConfig.String("qiniu_accesskey"), beego.AppConfig.String("qiniu_secretkey"))
	upToken := putPolicy.UploadToken(mac)
	cfg := storage.Config{}
	//空间对应机房
	//其中关于Zone对象和机房的关系如下:
	//    机房    Zone对象
	//    华东    storage.ZoneHuadong
	//    华北    storage.ZoneHuabei
	//    华南    storage.ZoneHuanan
	//    北美    storage.ZoneBeimei
	//七牛云存储空间设置首页有存储区域
	cfg.Zone = &storage.ZoneHuadong
	//不启用HTTPS域名
	cfg.UseHTTPS = false
	//不使用CND加速
	cfg.UseCdnDomains = false
	//构建上传表单对象
	formUploader := storage.NewFormUploader(&cfg)
	ret := storage.PutRet{}
	// 可选
	putExtra := storage.PutExtra{
		Params: map[string]string{},
	}
	err := formUploader.PutFile(context.Background(), &ret, upToken, key, filePath, &putExtra)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(ret.Key, ret.Hash)
}