package nettests

import "github.com/pkg/errors"

// Psiphon test implementation
type Psiphon struct {
}

// Run starts the test
func (h Psiphon) Run(ctl *Controller) error {
	builder, err := ctl.Session.NewExperimentBuilder(
		"psiphon",
	)
	if err != nil {
		return err
	}
	return ctl.Run(builder, []string{""})
}

// PsiphonTestKeys contains the test keys
type PsiphonTestKeys struct {
	IsAnomaly     bool    `json:"-"`
	BootstrapTime float64 `json:"bootstrap_time"`
	Failure       string  `json:"failure"`
}

// GetTestKeys generates a summary for a test run
func (h Psiphon) GetTestKeys(tk map[string]interface{}) (interface{}, error) {
	var (
		ok       bool
		testKeys PsiphonTestKeys
	)
	if tk["failure"] != nil {
		testKeys.IsAnomaly = true
		failure, ok := tk["failure"].(*string)
		if !ok {
			return testKeys, errors.New("failure key invalid")
		}
		testKeys.Failure = *failure
	}
	testKeys.BootstrapTime, ok = tk["bootstrap_time"].(float64)
	if !ok {
		return testKeys, errors.New("bootstrap_time key invalid")
	}
	return testKeys, nil
}

// LogSummary writes the summary to the standard output
func (h Psiphon) LogSummary(s string) error {
	return nil
}