// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package util

import (
	"sort"
	"strings"

	"v.io/v23"
	"v.io/v23/context"
	"v.io/v23/naming"
	"v.io/v23/verror"
)

// ListChildren returns the relative names of all children of parentFullName.
func ListChildren(ctx *context.T, parentFullName string) ([]string, error) {
	ns := v23.GetNamespace(ctx)
	ch, err := ns.Glob(ctx, naming.Join(parentFullName, "*"))
	if err != nil {
		return nil, err
	}
	names := []string{}
	for globReply := range ch {
		switch v := globReply.(type) {
		case *naming.GlobReplyEntry:
			escName := v.Value.Name[strings.LastIndex(v.Value.Name, "/")+1:]
			// Component names within object names are always escaped. See comment in
			// server/nosql/dispatcher.go for explanation.
			name, ok := Unescape(escName)
			if !ok {
				// If this happens, there's a bug in the Syncbase server. Glob should
				// return names with escaped components.
				return nil, verror.New(verror.ErrInternal, ctx, escName)
			}
			names = append(names, name)
		case *naming.GlobReplyError:
			// TODO(sadovsky): Surface these errors somehow.
		}
	}
	sort.Strings(names)
	return names, nil
}
