package im

import (
	"github.com/measurement-kit/go-measurement-kit"
	"github.com/ooni/probe-cli/nettests"
)

// Telegram test implementation
type Telegram struct {
}

// Run starts the test
func (h Telegram) Run(ctl *nettests.Controller) error {
	mknt := mk.NewNettest("Telegram")
	ctl.Init(mknt)
	return mknt.Run()
}

// TelegramTestKeys for the test
type TelegramTestKeys struct {
	HTTPBlocking bool `json:"telegram_http_blocking"`
	TCPBlocking  bool `json:"telegram_tcp_blocking"`
	WebBlocking  bool `json:"telegram_web_blocking"`
	IsAnomaly    bool `json:"-"`
}

// GetTestKeys generates a summary for a test run
func (h Telegram) GetTestKeys(tk map[string]interface{}) interface{} {
	var (
		tcpBlocking  bool
		httpBlocking bool
		webBlocking  bool
	)

	if tk["telegram_tcp_blocking"] == nil {
		tcpBlocking = false
	} else {
		tcpBlocking = tk["telegram_tcp_blocking"].(bool)
	}
	if tk["telegram_http_blocking"] == nil {
		httpBlocking = false
	} else {
		httpBlocking = tk["telegram_http_blocking"].(bool)
	}
	if tk["telegram_web_status"] == nil {
		webBlocking = false
	} else {
		webBlocking = tk["telegram_web_status"].(string) == "blocked"
	}

	return TelegramTestKeys{
		TCPBlocking:  tcpBlocking,
		HTTPBlocking: httpBlocking,
		WebBlocking:  webBlocking,
		IsAnomaly:    webBlocking || httpBlocking || tcpBlocking,
	}
}

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