package vfs

import (
	"errors"
	"io/fs"
)

// FindLeafInTree returns the first path that holds `name`,
// traversing up to the root of the filesystem, starting at `p`.
func FindLeafInTree(p Path, name string) (Path, error) {
	for p != nil {
		_, err := fs.Stat(p, name)

		// No error means we found the leaf in p.
		if err == nil {
			return p, nil
		}

		// ErrNotExist means we continue traversal up the tree.
		if errors.Is(err, fs.ErrNotExist) {
			p = p.Parent()
			continue
		}

		return nil, err
	}

	return nil, fs.ErrNotExist
}