package runtimeworker

import (
	"context"
	"errors"
	"io"

	"github.com/nexuscrm/records"
	"github.com/nexuscrm/storage"
)

// runtimeBulkObjectReader keeps the records engine dependent on a neutral
// stream contract while production composition owns the concrete filesystem or
// S3 implementation and its provider-specific errors.
type runtimeBulkObjectReader struct {
	store storage.ObjectStore
}

func (r runtimeBulkObjectReader) OpenBulkObject(
	ctx context.Context,
	key string,
) (io.ReadCloser, int64, error) {
	body, metadata, err := r.store.GetObject(ctx, key)
	if err != nil {
		if errors.Is(err, storage.ErrObjectNotFound) {
			return nil, 0, errors.Join(records.ErrBulkObjectNotFound, err)
		}
		return nil, 0, err
	}
	return body, metadata.Size, nil
}
