//go:build darwin
// +build darwin

package ssh

import (
	"bytes"
	"fmt"
	"os/exec"
	"os/user"
	"strings"
)

func userNameLookup(username string) (*user.User, error) {
	var userObject *user.User
	userObject, err := user.Lookup(username)
	if err != nil && err.Error() == user.UnknownUserError(username).Error() {
		return idUserNameLookup(username)
	} else if err != nil {
		return nil, err
	}

	return userObject, nil
}

func idUserNameLookup(username string) (*user.User, error) {
	cmd := exec.Command("id", "-P", username)
	out, err := cmd.CombinedOutput()
	if err != nil {
		return nil, fmt.Errorf("error while retrieving user with id -P command, error: %v", err)
	}
	colon := ":"

	if !bytes.Contains(out, []byte(username+colon)) {
		return nil, fmt.Errorf("unable to find user in returned string")
	}
	// netbird:********:501:20::0:0:netbird:/Users/netbird:/bin/zsh
	parts := strings.SplitN(string(out), colon, 10)
	userObject := &user.User{
		Username: parts[0],
		Uid:      parts[2],
		Gid:      parts[3],
		Name:     parts[7],
		HomeDir:  parts[8],
	}
	return userObject, nil
}