package api

import (
	"net/http"

	"github.com/pingcap/schrodinger/util"
)

// ListRunningTasks lists running task id(experiment id)
func (h *ManagerHandler) ListRunningTasks(w http.ResponseWriter, r *http.Request) {
	tasks := h.mgr.ListRunningTasks()
	size := getSize(r)
	offset := getOffset(r)
	start, end := getPagingIndexes(int64(len(tasks)), offset, size)

	listData := ListData{
		List:   tasks[start:end],
		Offset: offset,
		Size:   size,
		Total:  int64(len(tasks)),
	}
	h.rdr.JSON(w, http.StatusOK, util.SuccessResponse(listData))
}

// ResourceSummary is resource summary
type ResourceSummary struct {
	PdSize   int32 `json:"pd_size"`
	TikvSize int32 `json:"tikv_size"`
	TidbSize int32 `json:"tidb_size"`
}

// GetResourceUsage gets all resource usage
func (h *ManagerHandler) GetResourceUsage(w http.ResponseWriter, r *http.Request) {
	resourceSummary := &ResourceSummary{}
	experiments := h.mgr.ListRunningExperiments()
	for _, experiment := range experiments {
		resourceSummary.PdSize += experiment.Config.Cat.PDConfig.Size
		resourceSummary.TikvSize += experiment.Config.Cat.TiKVConfig.Size
		resourceSummary.TidbSize += experiment.Config.Cat.TiDBConfig.Size
	}
	h.rdr.JSON(w, http.StatusOK, util.SuccessResponse(resourceSummary))
}
