package user

import (
	"net/http"
	"strings"
	"wechat-conf/models/model"
	"wechat-conf/models/user"
	"wechat-conf/utils"

	"github.com/astaxie/beego"

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

// UserServ 用户
type UserServ struct {
	ctx *utils.Context
	dao *user.UserDAO
}

// NewUserServ 初始化
func NewUserServ(ctx *utils.Context) *UserServ {
	return &UserServ{
		ctx: ctx,
		dao: user.NewUserDAO(ctx),
	}
}

// CheckUserRoute 判断用户理由
func (s *UserServ) CheckUserRoute(userId, route, method string) (int, error) {

	if strings.Index(route, "admin") < 0 {
		return http.StatusOK, nil
	}

	// 如果没有登录
	if userId == "" {
		return http.StatusUnauthorized, utils.LogError("请先登录系统")
	}

	return http.StatusOK, nil
}

// ValidUserNameLogin 验证登陆
func (s *UserServ) ValidUserNameLogin(userName, pass string) (*model.SysUser, error) {
	user, err := s.dao.GetUserByUserName(userName)
	if err != nil {
		return nil, err
	}

	if !s.ValidatePassword(&user, pass) {
		return nil, utils.LogError("用户密码不正确")
	}

	return &user, nil
}

// UpdatePassword 更新用户密码
func (s *UserServ) UpdatePassword(userID, newPass string) error {
	return s.dao.UpdatePassword(userID, newPass)
}

// ValidatePassword 验证密码是否正确
func (s *UserServ) ValidatePassword(user *model.SysUser, password string) bool {
	beego.Error(encrypt.Md5(password, user.UserId))
	return user.Pwd == encrypt.Md5(password, user.UserId)
}

// GetUserByID 根据ID获取用户信息
func (s *UserServ) GetUserByID(userid string) (*model.SysUser, error) {
	user, err := s.dao.GetUserByID(userid)
	if err != nil {
		return nil, err
	}
	return user, nil
}