package sysuser

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

	"github.com/yl10/kit/encrypt"
)

// SysuserServ 用户
type SysuserServ struct {
	ctx    *utils.Context
	dao    *sysuser.SysuserDAO
	orgdao *sysorg.SysorgDAO
}

// NewSysuserServ 初始化
func NewSysuserServ(ctx *utils.Context) *SysuserServ {
	return &SysuserServ{
		ctx:    ctx,
		dao:    sysuser.NewSysuserDAO(ctx),
		orgdao: sysorg.NewSysorgDAO(ctx),
	}
}

func (s *SysuserServ) GetSysuserList(page, pageSize int) (map[string]interface{}, error) {
	if pageSize == 0 {
		pageSize = service.PAGENUM
	}
	sysuser, err := s.dao.GetSysuserList(page, pageSize)
	if err != nil {
		utils.LogError("获取用户列表失败: " + err.Error())
		return nil, errors.New("获取用户列表失败")
	}
	total, err := s.dao.GetSysuserListCount()
	if err != nil {
		utils.LogError("获取用户列表失败: " + err.Error())
		return nil, errors.New("获取用户列表失败")
	}
	return map[string]interface{}{
		"list":     sysuser,
		"pageSize": pageSize,
		"pagenum":  total,
		"page":     page,
	}, nil
}
func (s *SysuserServ) GetSysuserById(userId string) (*model.SysUser, error) {
	user, err := s.dao.GetSysuserById(userId)
	if err != nil {
		utils.LogError("获取用户详情失败: " + err.Error())
		return nil, errors.New("获取用户详情失败")
	}
	return user, nil
}
func (s *SysuserServ) SaveUser(user model.SysUser) (*model.SysUser, error) {
	var newUser *model.SysUser
	var err error
	if user.RealName == "" {
		return nil, errors.New("真实姓名不能为空")
	}
	if user.UserName == "" {
		return nil, errors.New("用户名不能为空")
	}
	if user.Phone == "" {
		return nil, errors.New("手机号不能为空")
	}
	if user.UserId == "" {
		user.UserId = utils.GetGUID()
		user.Pwd = encrypt.Md5(encrypt.Md5("123456"), user.UserId)
		newUser, err = s.dao.AddUser(user)
	} else {
		err = s.dao.EditUser(user)
		newUser = &user
	}
	if err != nil {
		utils.LogError("保存用户详情失败: " + err.Error())
		return nil, errors.New("保存用户详情失败")
	}
	return newUser, nil
}
func (s *SysuserServ) BindUser(userId, orgId string) error {
	flag, err := s.orgdao.IsOrgBinded(orgId)
	if err != nil {
		utils.LogError("綁定用户失败: " + err.Error())
		return errors.New("綁定用户失败")
	}
	if flag {
		err := s.dao.BindUserToOrg(userId, orgId)
		if err != nil {
			utils.LogError("綁定用户失败: " + err.Error())
			return errors.New("綁定用户失败")
		}
	} else {
		return errors.New("该项目已绑定用户")
	}

	return nil

}
func (s *SysuserServ) DeleteUser(userId string) error {
	err := s.dao.DeleteUser(userId)
	if err != nil {
		utils.LogError("删除用户失败: " + err.Error())
		return errors.New("删除用户失败")
	}
	return nil
}
func (s *SysuserServ) GetAppIdByOrgId(orgId string) (string, error) {
	appId, err := s.dao.GetAppIdByOrgId(orgId)
	if err != nil {
		utils.LogError("获取APPID失败: " + err.Error())
		return "", errors.New("获取APPID失败")
	}
	return appId, nil
}

func (s *SysuserServ) ChangePassword(userId, pwd string) error {
	err := s.dao.ChangePassword(userId, pwd)
	if err != nil {
		utils.LogError("修改密码失败: " + err.Error())
		return errors.New("修改密码失败")
	}
	return nil

}

func (s *SysuserServ) GetOrgAuthByUserId(userId string) (bool, error) {
	flag, err := s.dao.GetOrgAuthByUserId(userId)
	if err != nil {
		utils.LogError("获取用户项目授权失败: " + err.Error())
		return false, errors.New("获取用户项目授权失败")
	}
	return flag, nil
}