package sysorg

import (
	"errors"
	"time"
	"wechat-conf/models"
	"wechat-conf/models/model"
	"wechat-conf/models/sysorg"
	"wechat-conf/models/sysuser"
	"wechat-conf/models/wechat"
	"wechat-conf/models/wechatmenu"
	"wechat-conf/service"
	"wechat-conf/utils"
)

// SysorgServ 用户
type SysorgServ struct {
	ctx       *utils.Context
	dao       *sysorg.SysorgDAO
	mdao      *wechatmenu.WechatMenuDAO
	wechatdao *wechat.WechatDAO
	userdao   *sysuser.SysuserDAO
}

// NewSysorgServ 初始化
func NewSysorgServ(ctx *utils.Context) *SysorgServ {
	return &SysorgServ{
		ctx:       ctx,
		dao:       sysorg.NewSysorgDAO(ctx),
		mdao:      wechatmenu.NewWechatMenuDAO(ctx),
		wechatdao: wechat.NewWechatDAO(ctx),
		userdao:   sysuser.NewSysuserDAO(ctx),
	}
}
func (s *SysorgServ) GetOrgList(page, pageSize int) (map[string]interface{}, error) {
	if pageSize == 0 {
		pageSize = service.PAGENUM
	}
	org, err := s.dao.GetOrgList(page, pageSize)
	if err != nil {
		utils.LogError("获取项目列表失败: " + err.Error())
		return nil, errors.New("获取项目列表失败")
	}
	total, err := s.dao.GetOrgListCount()
	if err != nil {
		utils.LogError("获取项目列表失败: " + err.Error())
		return nil, errors.New("获取项目列表失败")
	}
	return map[string]interface{}{
		"list":     org,
		"pageSize": pageSize,
		"pagenum":  total,
		"page":     page,
	}, nil
}
func (s *SysorgServ) AddOrg(org model.SysOrg) (*model.SysOrg, error) {
	newOrg, err := s.dao.AddOrg(org)
	if err != nil {
		utils.LogError("新增项目失败: " + err.Error())
		return nil, errors.New("新增项目失败")
	}
	var wechatmenu = model.TaWechatMenu{
		OrgId:            newOrg.OrgId,
		WechatConfigJson: "",
	}
	_, err = s.mdao.AddWechatMenu(wechatmenu)
	if err != nil {
		utils.LogError("新增项目失败: " + err.Error())
		return nil, errors.New("新增项目失败")
	}
	return newOrg, nil
}
func (s *SysorgServ) AuthOrg(org model.SysOrg) error {
	err := s.dao.AuthOrg(org)
	if err != nil {
		utils.LogError("授权项目失败: " + err.Error())
		return errors.New("授权项目失败")
	}
	return nil
}
func (s *SysorgServ) DeleteOrg(orgId string) error {
	var err error
	var user *model.SysUser
	user, err = s.userdao.GetSysuserByOrgId(orgId)
	if err != nil {
		utils.LogError("删除项目失败: " + err.Error())
		return errors.New("删除项目失败")
	}

	if user != nil {
		return errors.New("当前项目已被用户绑定,请先进行解绑操作")
	}
	err = s.dao.DeleteOrg(orgId)
	if err != nil {
		utils.LogError("删除项目失败: " + err.Error())
		return errors.New("删除项目失败")
	}
	return nil
}

// BindWechat 绑定微信
func (s *SysorgServ) BindWechat(orgid, confid string) error {
	wechatConf, err := s.wechatdao.GetWechatConfByConfId(confid)
	if err != nil {
		return err
	}
	if wechatConf == nil && wechatConf.Appid == "" {
		return errors.New("没有获取到微信信息")
	}
	var orginfo = model.SysOrg{
		OrgId:      orgid,
		WechatId:   wechatConf.ConfId,
		WechatName: wechatConf.WxNikeName,
	}
	err = s.dao.AuthOrg(orginfo)

	if err != nil {
		return err
	}
	// 更新微信信息
	var conf = model.SysWechatConf{
		BindDate: time.Now().Local(),
		Status:   models.STATUS_NORMAL,
		ConfId:   wechatConf.ConfId,
	}

	err = s.wechatdao.UpdateWechatConf(conf, []string{
		"bind_date",
		"status",
	})
	return err
}