package localstore

import (
	"context"

	"github.com/nspcc-dev/neofs-api-go/object"
	"github.com/pkg/errors"
)

func (l *localstore) PRead(ctx context.Context, key Address, rng object.Range) ([]byte, error) {
	var (
		err  error
		k, v []byte
		obj  Object
	)

	k, err = key.Hash()
	if err != nil {
		return nil, errors.Wrap(err, "Localstore Get failed on key.Marshal")
	}

	v, err = l.blobBucket.Get(k)
	if err != nil {
		return nil, errors.Wrap(err, "Localstore Get failed on blobBucket.Get")
	}

	if err := obj.Unmarshal(v); err != nil {
		return nil, errors.Wrap(err, "Localstore Get failed on object.Unmarshal")
	}

	if rng.Offset+rng.Length > uint64(len(obj.Payload)) {
		return nil, ErrOutOfRange
	}

	return obj.Payload[rng.Offset : rng.Offset+rng.Length], nil
}