package summary

import "fmt"

// ResultSummaryFunc is the function used to generate result summaries
type ResultSummaryFunc func(SummaryMap) (string, error)

// SummaryMap contains a mapping from test name to serialized summary for it
type SummaryMap map[string][]string

// PerformanceSummary is the result summary for a performance test
type PerformanceSummary struct {
	Upload   int64
	Download int64
	Ping     float64
	Bitrate  int64
}

// MiddleboxSummary is the summary for the middlebox tests
type MiddleboxSummary struct {
	Detected bool
}

// IMSummary is the summary for the im tests
type IMSummary struct {
	Tested  uint
	Blocked uint
}

// WebsitesSummary is the summary for the websites test
type WebsitesSummary struct {
	Tested  uint
	Blocked uint
}

func CheckRequiredKeys(rk []string, m SummaryMap) error {
	for _, key := range rk {
		if _, ok := m[key]; ok {
			continue
		}
		return fmt.Errorf("missing SummaryMap key '%s'", key)
	}
	return nil
}