package service

import (
	"github.com/druidcaesa/gotool"
	"ulink-admin/frame"
	"ulink-admin/modules/system/dao"
	"ulink-admin/modules/system/models/model"
	"ulink-admin/modules/system/models/req"
)

type SysMemberService struct {
	SysMemberDao *dao.SysMemberDao `inject:""`
}

// List 查询所有会员管理业务方法
func (this SysMemberService) List(query *req.SysMemberQuery, list interface{}) {
	this.SysMemberDao.List(query, list)
}

// Page 查询会员管理分页列表
func (this SysMemberService) Page(query *req.SysMemberQuery, list interface{}) int64 {
	return this.SysMemberDao.Page(query, list)
}

// Insert 添加会员管理
func (this SysMemberService) Insert(sysMember *model.SysMember) {
	//检查登录账号唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "user_name=?", sysMember.UserName) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.UserName+"'失败,登录账号已存在")
	}
	//检查手机号唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "phone=?", sysMember.Phone) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.Phone+"'失败,手机号已存在")
	}
	//检查邮箱地址唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "email=?", sysMember.Email) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.Email+"'失败,邮箱地址已存在")
	}
	//检查微信openId唯一性
	if gotool.StrUtils.HasEmpty(sysMember.OpenId) {
		if this.SysMemberDao.Exist(sysMember.TableName(), "open_id=?", sysMember.OpenId) {
			frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.OpenId+"'失败,微信openId已存在")
		}
	}
	sysMember.Password = gotool.BcryptUtils.Generate(sysMember.Password)
	this.SysMemberDao.Insert(sysMember)
}

// Get 查询
func (this SysMemberService) Get(id int64) *model.SysMember {
	return this.SysMemberDao.GetById(id, &model.SysMember{}).(*model.SysMember)
}

// Delete 批量删除
func (this SysMemberService) Delete(list []int64) {
	this.SysMemberDao.Delete(&model.SysMember{}, list)
}

// Edit 修改
func (this SysMemberService) Edit(sysMember *model.SysMember, cols []string) {
	//检查登录账号唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "user_name=? and id!=?", sysMember.UserName, sysMember.Id) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.UserName+"'失败,登录账号已存在")
	}
	//检查手机号唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "phone=? and id!=?", sysMember.Phone, sysMember.Id) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.Phone+"'失败,手机号已存在")
	}
	//检查邮箱地址唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "email=? and id!=?", sysMember.Email, sysMember.Id) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.Email+"'失败,邮箱地址已存在")
	}
	//检查微信openId唯一性
	if this.SysMemberDao.Exist(sysMember.TableName(), "open_id=? and id!=?", sysMember.OpenId, sysMember.Id) {
		frame.Throw(frame.BUSINESS_CODE, "新增会员管理'"+sysMember.OpenId+"'失败,微信openId已存在")
	}
	this.SysMemberDao.Update(sysMember, cols...)
}