//go:build !windows && !darwin
// +build !windows,!darwin

package usershell

import (
	"os"
	"strings"

	"golang.org/x/xerrors"
)

// Get returns the /etc/passwd entry for the username provided.
func Get(username string) (string, error) {
	contents, err := os.ReadFile("/etc/passwd")
	if err != nil {
		return "", xerrors.Errorf("read /etc/passwd: %w", err)
	}
	lines := strings.Split(string(contents), "\n")
	for _, line := range lines {
		if !strings.HasPrefix(line, username+":") {
			continue
		}
		parts := strings.Split(line, ":")
		if len(parts) < 7 {
			return "", xerrors.Errorf("malformed user entry: %q", line)
		}
		return parts[6], nil
	}
	if s := os.Getenv("SHELL"); s != "" {
		return s, nil
	}
	return "", xerrors.Errorf("shell for user %q not found in /etc/passwd or $SHELL", username)
}
