package common

import (
	"fmt"
	"net/url"

	buildbucketpb "go.chromium.org/luci/buildbucket/proto"
	"google.golang.org/genproto/protobuf/field_mask"
)

// common variables that need to be exposed to the mock
// External clients should not use these

var (
	// GetBuildFields is a FieldMask which indicates which fields we want
	// returned from a GetBuild request.
	// TODO(borenet): This is the union of all fields needed by all users
	// of GetBuild. We should use a separate Field Mask per use case.
	GetBuildFields = &field_mask.FieldMask{
		Paths: []string{
			"builder",
			"create_time",
			"created_by",
			"end_time",
			"id",
			"infra.backend.task.id.id",
			"input.gerrit_changes",
			"input.properties",
			"start_time",
			"status",
			"tags",
		},
	}

	// SearchBuildsFields is a FieldMask which indicates which fields we
	// want returned from a SearchBuilds request.
	SearchBuildsFields = &field_mask.FieldMask{
		Paths: func(buildFields []string) []string {
			rv := make([]string, 0, len(buildFields))
			for _, f := range buildFields {
				rv = append(rv, fmt.Sprintf("builds.*.%s", f))
			}
			return rv
		}(GetBuildFields.Paths),
	}
)

// GetTrybotsForCLPredicate returns a *buildbucketpb.BuildPredicate which
// searches for trybots from the given CL.
func GetTrybotsForCLPredicate(issue, patchset int64, gerritUrl string, tags map[string]string) (*buildbucketpb.BuildPredicate, error) {
	u, err := url.Parse(gerritUrl)
	if err != nil {
		return nil, err
	}
	tagStringPairs := []*buildbucketpb.StringPair{}
	for k, v := range tags {
		stringPair := &buildbucketpb.StringPair{
			Key:   k,
			Value: v,
		}
		tagStringPairs = append(tagStringPairs, stringPair)
	}
	return &buildbucketpb.BuildPredicate{
		GerritChanges: []*buildbucketpb.GerritChange{
			{
				Host:     u.Host,
				Change:   issue,
				Patchset: patchset,
			},
		},
		Tags: tagStringPairs,
	}, nil
}
