package wechat

import (
	"wechat-conf/models/model"
	"wechat-conf/models/wechat"
	"wechat-conf/utils"
)

// WechatServ 用户
type WechatServ struct {
	ctx *utils.Context
	dao *wechat.WechatDAO
}

// NewWechatServ 初始化
func NewWechatServ(ctx *utils.Context) *WechatServ {
	return &WechatServ{
		ctx: ctx,
		dao: wechat.NewWechatDAO(ctx),
	}
}

// SaveWechatConf 保存微信配置
func (s *WechatServ) SaveWechatConf(conf model.SysWechatConf) error {
	wechatConf, err := s.dao.GetWechatConfByAppID(conf.Appid)
	if err != nil {
		utils.LogError("根据appid获取微信配置失败:", err)
		return err
	}
	if wechatConf != nil && wechatConf.ConfId != "" {
		// 修改
		conf.ConfId = wechatConf.ConfId
		var cols = []string{
			"refresh_token",
			"token",
		}
		if conf.AuthorizationInfo != "" {
			cols = append(cols, "authorization_info")
		}
		err := s.dao.UpdateWechatConf(conf, cols)
		if err != nil {
			utils.LogError("修改微信配置失败:", err)
			return err
		}
	} else {
		// 新增
		err := s.dao.SaveWechatConf(&conf)
		if err != nil {
			utils.LogError("新增微信配置失败:", err)
			return err
		}
	}
	return nil
}

// UpdateToken 更新微信token
func (s *WechatServ) UpdateToken(token map[string]string) {
	var conf = model.SysWechatConf{
		Token:        token["token"],
		RefreshToken: token["refreshToken"],
		Appid:        token["appid"],
	}
	err := s.SaveWechatConf(conf)
	if err != nil {
		utils.LogError("更新微信token失败:", err)
	}
}