package buildbucket

import (
	"bytes"

	"github.com/golang/protobuf/proto"
	"go.skia.org/infra/go/gitiles"
)

const (
	PROJECT_CFG_FILE    = "cr-buildbucket.cfg"
	INFRA_CONFIG_BRANCH = "infra/config"
)

// GetProjectConfig loads the cr-buildbucket.cfg file from the given repo via Gitiles.
func GetProjectConfig(repo string) (*BuildbucketCfg, error) {
	var buf bytes.Buffer
	if err := gitiles.NewRepo(repo, "", nil).ReadFileAtRef(PROJECT_CFG_FILE, INFRA_CONFIG_BRANCH, &buf); err != nil {
		return nil, err
	}
	return ParseProjectConfig(buf.String())
}

// GetBotsForConfig obtains the list of bots from the given project config.
func GetBotsForConfig(cfg *BuildbucketCfg) []string {
	bots := []string{}
	for _, bucket := range cfg.Buckets {
		if bucket.Swarming != nil {
			if bucket.Swarming.Builders != nil {
				for _, bot := range bucket.Swarming.Builders {
					bots = append(bots, *bot.Name)
				}
			}
		}
	}
	return bots
}

// GetBotsForRepo obtains the list of bots from the given repo by reading the
// cr-buildbucket.cfg file from Gitiles.
func GetBotsForRepo(repo string) ([]string, error) {
	cfg, err := GetProjectConfig(repo)
	if err != nil {
		return nil, err
	}
	return GetBotsForConfig(cfg), nil
}

// ParseProjectConfig parses the string to obtain a project config.
func ParseProjectConfig(cfg string) (*BuildbucketCfg, error) {
	var rv BuildbucketCfg
	if err := proto.UnmarshalText(cfg, &rv); err != nil {
		return nil, err
	}
	return &rv, nil
}
