package services

import (
	"gitea.zjmud.xyz/phyer/rbac/models"
	"gitea.zjmud.xyz/phyer/rbac/repositories"

	// "gitea.zjmud.xyz/phyer/rbac/utils"
	"golang.org/x/crypto/bcrypt"
)

func GetAllUsers() ([]models.User, error) {
	return repositories.GetAllUsers()
}

func GetUserByID(id string) (*models.User, error) {
	return repositories.GetUserByID(id)
}

func UpdateUser(id string, updateData map[string]interface{}) (*models.User, error) {
	if password, ok := updateData["password"]; ok {
		hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password.(string)), bcrypt.DefaultCost)
		if err != nil {
			return nil, err
		}
		updateData["password"] = string(hashedPassword)
	}
	return repositories.UpdateUser(id, updateData)
}

func DeleteUser(id string) error {
	return repositories.DeleteUser(id)
}

func RegisterUser(username, fullname, password, email string) (*models.User, error) {
	hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	if err != nil {
		return nil, err
	}
	user := &models.User{
		Username: username,
		Fullname: fullname,
		Password: string(hashedPassword),
		Email:    email,
	}
	return repositories.CreateUser(user)
}