package roller

import (
	"fmt"
	"net/http"
	"net/url"
	"sort"
	"strings"

	"go.skia.org/infra/go/metrics2"
	"go.skia.org/infra/go/rotations"
	"go.skia.org/infra/go/sklog"
	"go.skia.org/infra/go/util"
)

const (
	measurementGetReviewersSuccess  = "autoroll_get_reviewers_success"
	measurementGetReviewersNonEmpty = "autoroll_get_reviewers_nonempty"
)

// GetReviewers retrieves the current reviewers list. Does not return errors; if
// retrieval of the reviewers list fails, the provided backup reviewers are
// returned.
func GetReviewers(c *http.Client, metricsName string, reviewersSources, backupReviewers []string) []string {
	allEmails := util.StringSet{}
	for _, s := range reviewersSources {
		success := int64(1)
		emails, err := GetReviewersFromURLOrEmail(c, s)
		if err != nil {
			sklog.Errorf("Failed to retrieve reviewer(s) from %s: %s", s, err)
			success = 0
		} else {
			allEmails.AddLists(emails)
		}

		metrics2.GetInt64Metric("autoroll_get_reviewers_success", map[string]string{
			"roller":          metricsName,
			"reviewer_source": s,
		}).Update(success)
	}

	nonEmpty := int64(1)
	if len(allEmails) == 0 {
		allEmails.AddLists(backupReviewers)
		nonEmpty = 0
	}
	metrics2.GetInt64Metric("autoroll_get_reviewers_nonempty", map[string]string{
		"roller": metricsName,
	}).Update(nonEmpty)

	// Sort for consistency in testing.
	rv := allEmails.Keys()
	sort.Strings(rv)
	return rv
}

// GetReviewersFromURLOrEmail interprets a single reviewer as either an email
// address or a URL; if the latter, it loads the reviewers list from the URL.
func GetReviewersFromURLOrEmail(c *http.Client, reviewer string) ([]string, error) {
	// If the passed-in reviewersConfig doesn't look like a URL, it's probably
	// an email address. Use it directly.
	if _, err := url.ParseRequestURI(reviewer); err != nil {
		if strings.Count(reviewer, "@") == 1 {
			return []string{reviewer}, nil
		} else {
			return nil, fmt.Errorf("Reviewer must be an email address or a valid URL; %q doesn't look like either.", reviewer)
		}
	}
	return rotations.FromURL(c, reviewer)
}
