//go:build !windows

package sysutil

import (
	"os"
	"syscall"

	"github.com/gookit/goutil/strutil"
)

// IsAdmin Determine whether the current user is an administrator(root)
func IsAdmin() bool {
	return os.Getuid() == 0
}

// ChangeUserByName change work user by new username.
func ChangeUserByName(newUname string) error {
	u := MustFindUser(newUname)
	// syscall.Setlogin(newUname)
	return ChangeUserUIDGid(strutil.MustInt(u.Uid), strutil.MustInt(u.Gid))
}

// ChangeUserUidGid change work user by new username uid,gid
//
// Deprecated: use ChangeUserUIDGid instead
func ChangeUserUidGid(newUID int, newGid int) error {
	return ChangeUserUIDGid(newUID, newGid)
}

// ChangeUserUIDGid change work user by new username uid,gid
func ChangeUserUIDGid(newUID int, newGid int) (err error) {
	if newUID > 0 {
		err = syscall.Setuid(newUID)

		// update group id
		if err == nil && newGid > 0 {
			err = syscall.Setgid(newGid)
		}
	}
	return
}
