package wechatimg

import (
	"errors"
	"fmt"
	"io"
	"os"
	"strconv"
	"time"
	"wechat-conf/controllers"
	"wechat-conf/models/model"
	"wechat-conf/service/sysuser"
	"wechat-conf/service/wechatimg"
	"wechat-conf/utils"

	"github.com/astaxie/beego"
)

// 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) GetWechatImgCount() {
	user := c.Context.Get("user").(*model.SysUser)
	appid, err := c.sdao.GetAppIdByOrgId(user.OrgId)
	if err != nil {
		c.ResponseError(err)
	}
	wxclient, err := utils.Component.GetWxClient(appid)
	if err != nil {
		utils.LogError("获取微信信息失败: " + err.Error())
		c.ResponseError(err)
	}

	count, err := wxclient.GetMaterialCount()
	if err != nil {
		utils.LogError("获取微信详情失败: " + err.Error())
		c.ResponseError(err)
	}
	matype := c.GetString(":type")
	c.ResponseJSON(count[matype+"_count"])
}

// func (c *WechatImgController) GetWechatImgList() {
// 	user := c.Context.Get("user").(*model.SysUser)
// 	appid, err := c.sdao.GetAppIdByOrgId(user.OrgId)
// 	if err != nil {
// 		c.ResponseError(err)
// 	}
// 	// appid := c.GetString(":appid")
// 	wxclient, err := utils.Component.GetWxClient(appid)
// 	if err != nil {
// 		utils.LogError("获取微信信息失败: " + err.Error())
// 		c.ResponseError(err)
// 	}

// 	// total, err := c.dao.GetWechatImgCount()
// 	// if err != nil {
// 	// 	utils.LogError("获取微信信息失败: " + err.Error())
// 	// 	c.ResponseError(err)
// 	// }

// 	var data = map[string]string{}
// 	data["offset"] = "0"
// 	data["type"] = c.GetString(":type")
// 	data["count"] = "10"

// 	wechatImgs, err := wxclient.GetMaterialList(data)
// 	if err != nil {
// 		utils.LogError("获取微信详情失败: " + err.Error())
// 		c.ResponseError(err)
// 	}
// 	c.ResponseJSON(wechatImgs)
// }

func (c *WechatImgController) GetWechatImgList() {
	user := c.Context.Get("user").(*model.SysUser)
	page, _ := c.GetInt("page")
	pageSize, _ := c.GetInt("pagesize")
	list, err := c.dao.GetWechatImgList(user.OrgId, page, pageSize)
	if err != nil {
		c.ResponseError(err)
	}
	c.ResponseJSON(list)
}

func (c *WechatImgController) SyncWechatImg() {
	user := c.Context.Get("user").(*model.SysUser)
	appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
	if err != nil {
		c.ResponseError(err)
	}
	// appId := c.GetString(":appid")
	client, err := utils.Component.GetWxClient(appId)
	if err != nil {
		c.ResponseError(err)
	}

	count, err := client.GetMaterialCount()
	if err != nil {
		c.ResponseError(err)
	}

	imgcount := count["image_count"].(float64)
	page := int(imgcount)/20 + 1
	for i := 0; i < page; 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() {
	file, head, err := c.Ctx.Request.FormFile("media")
	if err != nil {
		beego.Error(err)
		c.ResponseError(err)
	}
	defer file.Close()

	imgurl := "./upload/" + head.Filename
	defer os.Remove(imgurl)

	//创建文件
	fW, err := os.Create(imgurl)
	if err != nil {
		fmt.Println("文件创建失败")
		return
	}
	defer fW.Close()
	_, err = io.Copy(fW, file)
	if err != nil {
		fmt.Println("文件保存失败")
		return
	}
	if err != nil {
		c.ResponseError(err)
	}
	url, err := c.BaseController.FileUploadMatrial()
	if err != nil {
		c.ResponseError(err)
	}
	utils.LogInfo("↓↓↓↓_________________________↓↓↓↓ali OSS img url(upload)↓↓↓↓___________________↓↓↓↓")
	utils.LogInfo(url)
	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)
	}

	id, err := UploaImage(client.GetToken(), imgurl)
	var img = model.TaWechatImg{
		MediaId:    id,
		Url:        beego.AppConfig.String("host") + head.Filename,
		Name:       head.Filename,
		UpdateTime: time.Now(),
		OrgId:      user.OrgId,
	}
	img.Url = url
	err = c.dao.AddWechatImg(img)
	if err != nil {
		c.ResponseError(err)
	}
	c.ResponseJSON(map[string]interface{}{
		"media_id": img.MediaId,
		"url":      url,
	})

}
func (c *WechatImgController) DeleteImg() {
	user := c.Context.Get("user").(*model.SysUser)
	appId, err := c.sdao.GetAppIdByOrgId(user.OrgId)
	if err != nil {
		c.ResponseError(err)
	}
	// appId := c.GetString(":appid")
	client, err := utils.Component.GetWxClient(appId)
	if err != nil {
		c.ResponseError(err)
	}

	mediaId := c.GetString(":mediaId")
	flag, err := c.dao.IsExistAuto(mediaId)
	if err != nil {
		c.ResponseError(err)
	}
	if flag {
		c.ResponseError(errors.New("该素材已被自动回复引用,不允许删除!"))
	}
	err = c.dao.DeleteImg(mediaId)
	if err != nil {

	}
	_, err = client.DelMaterial(mediaId)
	if err != nil {
		c.ResponseError(err)
	}
	c.ResponseJSON("删除成功")
}