package petsLy

import (
	"context"
	"duoduo/conf"
	"duoduo/models/mysqlLy"
	"duoduo/models/petsLy"
	"duoduo/tools"
	"duoduo/tools/app"
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/qiniu/go-sdk/v7/auth/qbox"
	"github.com/qiniu/go-sdk/v7/storage"
	"time"
)

func PetsCreate(c *gin.Context) {
	var inData petsLy.PetsCreateRequest
	var pets mysqlLy.Pets
	var user mysqlLy.User
	err := c.ShouldBindJSON(&inData)
	if err != nil {
		app.Error(c, 400, err, err.Error())
		return
	}
	confIni, err := conf.ConnIni()
	if err != nil {
		app.Error(c, 400, err, err.Error())
		return
	}
	fmt.Println("%+v", inData)
	//校验
	user.OpenID = inData.OpenId
	userInfo, err := user.Get()
	if err != nil {
		app.Error(c, 500, err, "用户信息错误")
		return
	}
	var pictures []string
	for i := 0; i < len(inData.Pictures); i++ {
		//fmt.Println(inData.Pictures[i])
		//上传图片
		timeUnixNano := time.Now().UnixNano() //单位纳秒
		fileName := fmt.Sprintf("%d.jpg", timeUnixNano)

		//七牛云上传图片
		bucket := "imgxx"
		key := "lingyang/" + inData.OpenId + "/" + fileName

		putPolicy := storage.PutPolicy{
			Scope: bucket,
		}

		mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
		upToken := putPolicy.UploadToken(mac)

		cfg := storage.Config{}
		// 空间对应的机房
		cfg.Zone = &storage.ZoneHuanan
		// 是否使用https域名
		cfg.UseHTTPS = false
		// 上传是否使用CDN上传加速
		cfg.UseCdnDomains = false

		// 构建表单上传的对象
		baseUploader := storage.NewBase64Uploader(&cfg)
		ret := storage.PutRet{}
		//data, err := base64.RawStdEncoding.DecodeString(inData.Pictures[i])
		//if err != nil {
		//	app.Error(c, 500, err, "上传图片失败")
		//	return
		//}
		err = baseUploader.Put(context.Background(), &ret, upToken, key, []byte(inData.Pictures[i]), nil)
		if err != nil {
			app.Error(c, 500, err, "上传图片失败")
			return
		}

		pictures = append(pictures, "http://lingyang.shisanmiao.com/"+key)
	}

	pets.UpdateTime = time.Now().Local()
	pets.CreateTime = time.Now().Local()
	pets.Name = inData.Name
	pets.Sex = inData.Sex
	pets.Status = 1 //待领养
	pets.UserID = userInfo.ID
	pets.Amount = inData.Amount
	pets.AdoptInfo = inData.AdoptInfo
	pets.Age = inData.Age
	pets.Area = inData.Area
	pets.City = inData.City
	pets.Deposit = inData.Deposit
	pets.OpenId = inData.OpenId

	if inData.IsFee == 2 {
		pets.DepositDate, err = tools.GetStringToTime(inData.DepositDate)
		if err != nil {
			app.Error(c, 500, err, "")
			return
		}
	}

	pets.IsExpellingParasite = inData.IsExpellingParasite
	pets.IsFee = inData.IsFee
	pets.IsImmune = inData.IsImmune
	pets.IsSterilization = inData.IsSterilization
	pets.Pet = inData.Pet
	pets.PetDes = inData.PetDes
	pets.PetInfo = inData.PetInfo
	pets.PetStatus = inData.PetStatus

	jsonData, err := json.Marshal(pictures)
	if err != nil {
		app.Error(c, 500, err, "")
		return
	}
	pets.Pictures = string(jsonData)
	pets.Province = inData.Province
	_, err = pets.Create()
	if err != nil {
		app.Error(c, 500, err, "插入数据失败")
		return
	}
	app.OK(c, nil, app.Success)
}