// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: Apache-2.0

package keepclient

import (
	"errors"
	"os"

	"git.arvados.org/arvados.git/sdk/go/arvados"
	"git.arvados.org/arvados.git/sdk/go/manifest"
)

// ErrNoManifest indicates the given collection has no manifest
// information (e.g., manifest_text was excluded by a "select"
// parameter when retrieving the collection record).
var ErrNoManifest = errors.New("Collection has no manifest")

// CollectionFileReader returns a Reader that reads content from a single file
// in the collection. The filename must be relative to the root of the
// collection.  A leading prefix of "/" or "./" in the filename is ignored.
func (kc *KeepClient) CollectionFileReader(collection map[string]interface{}, filename string) (arvados.File, error) {
	mText, ok := collection["manifest_text"].(string)
	if !ok {
		return nil, ErrNoManifest
	}
	fs, err := (&arvados.Collection{ManifestText: mText}).FileSystem(nil, kc)
	if err != nil {
		return nil, err
	}
	return fs.OpenFile(filename, os.O_RDONLY, 0)
}

func (kc *KeepClient) ManifestFileReader(m manifest.Manifest, filename string) (arvados.File, error) {
	fs, err := (&arvados.Collection{ManifestText: m.Text}).FileSystem(nil, kc)
	if err != nil {
		return nil, err
	}
	return fs.OpenFile(filename, os.O_RDONLY, 0)
}