package source

import "context"

var (
	FlagGitwebURLPattern = "https://cs.hackerspace.pl/hscloud@%s/-/blob/%s"
)

type Source interface {
	IsFile(ctx context.Context, path string) (bool, error)
	ReadFile(ctx context.Context, path string) ([]byte, error)
	IsDirectory(ctx context.Context, path string) (bool, error)
	WebLinks(fpath string) []WebLink
}

type WebLink struct {
	Kind      string
	LinkLabel string
	LinkURL   string
}

type SourceProvider interface {
	Source(ctx context.Context, rev string) (Source, error)
}

type singleRefProvider struct {
	source Source
}

func (s *singleRefProvider) Source(ctx context.Context, rev string) (Source, error) {
	return s.source, nil
}

func NewSingleRefProvider(s Source) SourceProvider {
	return &singleRefProvider{s}
}
