// bug is a package for handling bug reporting URLs.
package bug

import (
	"go.skia.org/infra/go/sklog"
	"go.skia.org/infra/perf/go/cid"
	"gopkg.in/olivere/elastic.v5/uritemplates"
)

// Expand the uriTemplate given a link to the regressing cluster, the commit, and the user's message about the regression.
func Expand(uriTemplate string, clusterLink string, c *cid.CommitDetail, message string) string {
	expansion := map[string]string{
		"cluster_url": clusterLink,
		"commit_url":  c.URL,
		"message":     message,
	}
	url, err := uritemplates.Expand(uriTemplate, expansion)
	if err != nil {
		sklog.Errorf("Failed to create bug reporting URL: %s", err)
	}
	return url
}

// ExampleExpand expands the given uriTemplate with example data.
func ExampleExpand(uriTemplate string) string {
	c := &cid.CommitDetail{
		URL: "https://skia.googlesource.com/skia/+show/d261e1075a93677442fdf7fe72aba7e583863664",
	}
	clusterLink := "https://perf.skia.org/t/?begin=1498332791&end=1498528391&subset=flagged"
	message := "Looks like a regression."
	return Expand(uriTemplate, clusterLink, c, message)
}
