package shard

import (
	"context"

	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
	"go.opentelemetry.io/otel/attribute"
	"go.opentelemetry.io/otel/trace"
)

// LogicalObjectsCount returns logical objects count.
func (s *Shard) LogicalObjectsCount(ctx context.Context) (uint64, error) {
	_, span := tracing.StartSpanFromContext(ctx, "Shard.LogicalObjectsCount",
		trace.WithAttributes(
			attribute.String("shard_id", s.ID().String()),
		))
	defer span.End()

	s.m.RLock()
	defer s.m.RUnlock()

	if s.GetMode().NoMetabase() {
		return 0, ErrDegradedMode
	}

	cc, err := s.metaBase.ObjectCounters()
	if err != nil {
		return 0, err
	}
	return cc.Logic, nil
}