package user

import (
	"wechat-conf/models/model"
	"wechat-conf/utils"

	"github.com/go-xorm/xorm"
	"github.com/yl10/kit/encrypt"
)

// UserDAO 当前数据库操作对象
type UserDAO struct {
	ctx *utils.Context
	db  *xorm.Session
}

// NewUserDAO New Inst
func NewUserDAO(ctx *utils.Context) *UserDAO {
	return &UserDAO{
		ctx: ctx,
		db:  ctx.DB,
	}
}

//GetUserByUserName  通过用户名获取用户信息
func (m *UserDAO) GetUserByUserName(name string) (model.SysUser, error) {
	query := `
			SELECT * FROM
		    	sys_user t
				WHERE
				user_name = '` + name + `'`

	user := new(model.SysUser)
	if has, err := m.db.Sql(query).Get(user); err != nil {
		return *user, err
	} else if !has {
		return *user, utils.LogError("账户不存在")
	}

	return *user, nil
}

// UpdatePassword 更新用户密码
func (m *UserDAO) UpdatePassword(userId, newPass string) error {
	password := encrypt.Md5(newPass, userId)

	sql := "update sys_user set pwd=? where user_id=?"

	_, err := m.db.Exec(sql, password, userId)
	if err != nil {
		return utils.LogError("更新新密码出错", err)
	}

	return nil
}

// GetUserByID 获取用户信息
func (m *UserDAO) GetUserByID(userId string) (*model.SysUser, error) {
	var user model.SysUser
	_, err := m.db.Where("user_id=?", userId).Get(&user)

	if err != nil {
		return nil, utils.LogError("获取人员信息失败", err)
	}

	return &user, nil
}