package backstage_dao

import (
	"errors"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/gtime"
	"youngmini_server/app/model/backstage_model"
)

// CreatUser 系统用户创建
func CreatUser(user *backstage_model.CreatUser) error {
	user.UserState = "1"
	_, err := g.DB().Model("user").
		Data(user).Insert()
	if err != nil {
		return errors.New("用户创建失败！")
	}
	return err
}

// SysUsers 用户登录验证
func SysUsers(user *backstage_model.SysUsersServiceSignReq) (*backstage_model.SysUserModelResp, error) {
	var use *backstage_model.SysUserModelResp
	err := g.DB().Model("user").Where("user", user.User).Scan(&use)
	// 判断用户名是否存在
	if use == nil {
		return nil, errors.New("该用户名不存在！")
	}
	if use.UserState == "0" {
		return nil, errors.New("该用户已被禁用！")
	}
	// 判断密码是否正确
	if use.Password != user.Password {
		return nil, errors.New("密码错误！")
	}
	_, err = g.DB().Model("user").Data(g.Map{"last_login_time": gtime.Now().Format("Y-m-d H:i:s")}).Unscoped().Where("user", user.User).OmitEmpty().Update()
	if err != nil {
		return nil, err
	}
	// 判断数据库语句是否正确执行
	if err != nil {
		return nil, err
	}
	return use, err
}

// SysUserExist 判断用户名是否存在
func SysUserExist(user string) (*backstage_model.UserBasics, error) {
	var use *backstage_model.UserBasics
	err := g.DB().Model("user").Where("user", user).Scan(&use)
	// 判断用户名是否存在
	if use == nil {
		return nil, errors.New("该用户名不存在！")
	}
	if err != nil {
		return nil, err
	}
	return use, nil
}

// ChangPassword 修改用户密码
func ChangPassword(user string, password string) error {
	_, err := g.DB().Model("user").Data("password", password).
		Where("user", user).OmitEmpty().Update()
	if err != nil {
		return err
	}
	return nil
}

// UserExist 用户创建时判断随机生成的用户名是否重复
func UserExist(user string) error {
	num, err := g.DB().Model("user").Where("user", user).Count()
	// 判断用户名是否存在
	if num > 0 || err != nil {
		g.Log("生成随机数重复")
		return errors.New("用户名已存在")
	}
	return nil
}

// UserNameExist 判断用户输入的后台用户名是否重复
func UserNameExist(userName string) error {
	g.DB().SetDebug(true)
	num, err := g.DB().Model("user").Where("username", userName).Count()
	// 判断用户名是否存在
	if num > 0 || err != nil {
		return errors.New("该后台用户名已存在")
	}
	return nil
}

// FindAllUser 分页查询
func FindAllUser(users *backstage_model.UserFind) ([]*backstage_model.AllUser, int, error) {
	var allUser []*backstage_model.AllUser
	g.DB().SetDebug(true)
	err := g.DB().Model("user").OmitEmpty().Where(users.User).Page(users.IndexPage, users.PageSize).OrderDesc("id").Scan(&allUser)
	if err != nil {
		return nil, 0, err
	}
	num, err := g.DB().Model("user").OmitEmpty().Where(users.User).Count()
	if err != nil {
		return nil, 0, err
	}
	return allUser, num, nil
}
