package roller

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

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

// Update the current sheriff list.
func getSheriff(parentName, childName, metricsName string, sheriffSources, backupSheriffs []string) ([]string, error) {
	tags := map[string]string{
		"roller": metricsName,
	}
	m := metrics2.GetInt64Metric("autoroll_get_sheriff_success", tags)
	allEmails := []string{}
	for _, s := range sheriffSources {
		emails, err := getSheriffHelper(s)
		if err != nil {
			sklog.Errorf("Failed to retrieve sheriff(s): %s", err)
			m.Update(0)
			if len(backupSheriffs) == 0 {
				return nil, fmt.Errorf("Failed to retrieve sheriffs and no backup sheriffs supplied!  %s", err)
			}
			return backupSheriffs, nil
		}
		allEmails = append(allEmails, emails...)
	}
	m.Update(1)
	return allEmails, nil
}

// Helper for loading the sheriff list.
func getSheriffHelper(sheriffConfig string) ([]string, error) {
	// If the passed-in sheriffConfig doesn't look like a URL, it's probably an
	// email address. Use it directly.
	if _, err := url.ParseRequestURI(sheriffConfig); err != nil {
		if strings.Count(sheriffConfig, "@") == 1 {
			return []string{sheriffConfig}, nil
		} else {
			return nil, fmt.Errorf("Sheriff must be an email address or a valid URL; %q doesn't look like either.", sheriffConfig)
		}
	}
	return rotations.FromURL(httputils.NewTimeoutClient(), sheriffConfig)
}
