package scrape

import (
	"encoding/json"
	"net/http"
)

type Status struct {
	ScrapeStatus string                      `json:"scrapeStatus"`
	Heartbeat    []*TidbClusterHeartbeatInfo `json:"heartbeat"`
	SQSStatus    string                      `json:"sqsStatus"`
}

const (
	Failed = "error"
	Ok     = "ok"
)

func (sm *ScrapeManager) RegisterStatusHandler() {
	http.HandleFunc("/scrape/status", sm.statusHandler)
}

func (sm *ScrapeManager) statusHandler(w http.ResponseWriter, _ *http.Request) {
	status := &Status{ScrapeStatus: Ok, SQSStatus: Ok}
	if ret, err := sm.List(); err != nil {
		status.ScrapeStatus = Failed
	} else {
		for _, item := range ret {
			heartbeat, _ := sm.ScrapeTidbClusterInfo(item)
			if heartbeat != nil {
				status.Heartbeat = append(status.Heartbeat, heartbeat)
			}
		}
		if len(status.Heartbeat) > 0 {
			msg, err := BuildSqsMessage(status.Heartbeat)
			if err != nil || sm.SendSqsMessage(msg) != nil {
				status.SQSStatus = Failed
			}
		}
	}
	data, _ := json.Marshal(status)
	_, _ = w.Write(data)
}
