package sysorg

import (
	"errors"
	"wechat-conf/models/model"
	"wechat-conf/models/sysorg"
	"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
}

// NewSysorgServ 初始化
func NewSysorgServ(ctx *utils.Context) *SysorgServ {
	return &SysorgServ{
		ctx:       ctx,
		dao:       sysorg.NewSysorgDAO(ctx),
		mdao:      wechatmenu.NewWechatMenuDAO(ctx),
		wechatdao: wechat.NewWechatDAO(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 {
	err := s.dao.DeleteOrg(orgId)
	if err != nil {
		utils.LogError("删除项目失败: " + err.Error())
		return errors.New("删除项目失败")
	}
	return nil
}

// BindWechat 绑定微信
func (s *SysorgServ) BindWechat(orgid, code string) error {
	wechatConf, err := s.wechatdao.GetWxByCode(code)
	if err != nil {
		return err
	}
	if wechatConf == nil && wechatConf.Appid == "" {
		return errors.New("没有获取到微信信息")
	}

	return nil
}