package wechatimg

import (
	"mime/multipart"
	"strconv"
	"time"
	"unsafe"
	"wechat-conf/controllers"
	"wechat-conf/models/model"
	"wechat-conf/service/sysuser"
	"wechat-conf/service/wechatimg"
	"wechat-conf/utils"
)

// WechatImgController 信息
type WechatImgController struct {
	dao  *wechatimg.WechatImgServ
	sdao *sysuser.SysuserServ
	controllers.BaseController
}

// Constructor 初始化 Controller
// @Title Constructor
// @Description 初始化 Controller, 系统自动调用
func (c *WechatImgController) Constructor() {
	c.dao = wechatimg.NewWechatImgServ(c.Context)
	c.sdao = sysuser.NewSysuserServ(c.Context)
}

func (c *WechatImgController) GetWechatImgList() {
	user := c.Context.Get("user").(*model.SysUser)
	appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
	if err != nil {
		c.ResponseError(err)
	}
	client, err := utils.Component.GetWxClient(appId)
	if err != nil {
		c.ResponseError(err)
	}
	page, _ := c.GetInt("page")
	pageSize, _ := c.GetInt("pagesize")
	offset := page * (pageSize - 1)
	var data map[string]string
	data["offset"] = strconv.Itoa(offset)
	data["type"] = "image"
	data["count"] = strconv.Itoa(pageSize)
	wechatImg, err := client.GetMaterialList(data)
	if err != nil {
		c.ResponseError(err)
	}
	c.ResponseJSON(wechatImg)
}
func (c *WechatImgController) SyncWechatImg() {
	user := c.Context.Get("user").(*model.SysUser)
	appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
	if err != nil {
		c.ResponseError(err)
	}
	client, err := utils.Component.GetWxClient(appId)
	if err != nil {
		c.ResponseError(err)
	}
	for i := 0; i < 200; i++ {
		var data map[string]string
		offset := i * 20
		data["offset"] = strconv.Itoa(offset)
		data["type"] = "image"
		data["count"] = strconv.Itoa(20)
		wechatImg, err := client.GetMaterialList(data)
		if err != nil {
			c.ResponseError(err)
		}
		if wechatImg == nil {
			break
		}
		err = c.dao.SyncWechatImg(wechatImg, user.OrgId)

		if err != nil {
			c.ResponseError(err)
		}
	}
	c.ResponseJSON("同步成功")
}
func (c *WechatImgController) AddNewImg() {
	user := c.Context.Get("user").(*model.SysUser)
	fromFront := c.GetString("fromFront")
	req := c.Ctx.Request
	file, fh, err := req.FormFile(fromFront)
	appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
	if err != nil {
		c.ResponseError(err)
	}
	client, err := utils.Component.GetWxClient(appId)
	if err != nil {
		c.ResponseError(err)
	}
	token := utils.Component.GetToken()
	type wechatMatrial struct {
		access_token string
		media        multipart.File
	}
	var media = wechatMatrial{
		access_token: token,
		media:        file,
	}
	byteDate := *(*[]byte)(unsafe.Pointer(&media))
	data, err := client.AddMaterial(byteDate, "image")
	var img = model.TaWechatImg{
		MediaId:    data["media_id"].(string),
		Url:        data["url"].(string),
		Name:       fh.Filename,
		UpdateTime: time.Now(),
	}
	err = c.dao.AddWechatImg(img)
	if err != nil {
		c.ResponseError(err)
	}
	c.ResponseJSON("上传成功")

}
func (c *WechatImgController) DeleteImg() {
	mediaId := c.GetString("mediaId")
	err := c.dao.DeleteImg(mediaId)
	if err != nil {
		c.ResponseError(err)
	}
	c.ResponseJSON("删除成功")
}