//go:build darwin

package proc

import (
	"time"

	"golang.org/x/sys/unix"
)

// processByPIDNative avoids enumerating every process on macOS. Sandboxed
// callers may be allowed to inspect a child process via KERN_PROC_PID while a
// full `ps -axo` snapshot is denied.
func processByPIDNative(pid int) (ProcessInfo, bool) {
	kinfo, err := unix.SysctlKinfoProc("kern.proc.pid", pid)
	if err != nil || kinfo == nil || int(kinfo.Proc.P_pid) != pid {
		return ProcessInfo{}, false
	}
	started := kinfo.Proc.P_starttime
	return ProcessInfo{
		PID:       pid,
		PPID:      int(kinfo.Eproc.Ppid),
		PGID:      int(kinfo.Eproc.Pgid),
		StartedAt: time.Unix(int64(started.Sec), int64(started.Usec)*int64(time.Microsecond)),
	}, true
}
