// Copyright 2017 Drone.IO Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package scm

import "context"

type (
	// Content stores the contents of a repository file.
	Content struct {
		Path   string
		Data   []byte
		Sha    string
		BlobID string
	}

	// ContentParams provide parameters for creating and
	// updating repository content.
	ContentParams struct {
		Ref       string
		Branch    string
		Message   string
		Data      []byte
		Sha       string
		BlobID    string
		Signature Signature
	}

	// ContentInfo stores the kind of any content in a repository.
	ContentInfo struct {
		Path   string
		Sha    string
		BlobID string
		Kind   ContentKind
	}

	// ContentService provides access to repositroy content.
	ContentService interface {
		// Find returns the repository file content by path.
		Find(ctx context.Context, repo, path, ref string) (*Content, *Response, error)

		// Create creates a new repository file.
		Create(ctx context.Context, repo, path string, params *ContentParams) (*Response, error)

		// Update updates a repository file.
		Update(ctx context.Context, repo, path string, params *ContentParams) (*Response, error)

		// Delete deletes a repository file.
		Delete(ctx context.Context, repo, path string, params *ContentParams) (*Response, error)

		// List returns a list of contents in a repository directory by path. It is
		// up to the driver to list the directory recursively or non-recursively,
		// but a robust driver should return a non-recursive list if possible.
		List(ctx context.Context, repo, path, ref string, opts ListOptions) ([]*ContentInfo, *Response, error)
	}
)
