package api

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/admin/forms"
)

// @Summary GetSystemSettings
// @tags System
// @Accept  json
// @Produce json
// @Success 200 {object} forms.SystemSettings
// @Router /system-settings [get]
func GetSystemSettings(c *gin.Context) {
	userContext := GetUserContext(c)
	settings, err := userContext.GetSystemSettings()
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	result := buildSystemSettings(settings)
	Success(c, result, http.StatusOK)
}

// @Summary UpdateSystemSettings
// @tags System
// @Accept  json
// @Produce json
// @Param settings body forms.SystemSettings true "update system settings"
// @Success 200 {object} forms.SystemSettings
// @Router /system-settings [put]
func UpdateSystemSettings(c *gin.Context) {
	req := forms.SystemSettings{}
	if err := c.ShouldBindJSON(&req); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}

	userContext := GetUserContext(c)
	settings := buildInternalSystemSettings(req)
	item, err := userContext.UpdateSystemSettings(settings)
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	Success(c, buildSystemSettings(item), http.StatusOK)
}

// @Summary GetDashboardStats
// @tags System
// @Accept  json
// @Produce json
// @Success 200 {object} forms.GetDashboardStatsResq
// @Router /dashboard/stats [get]
func GetDashboardStats(c *gin.Context) {
	userContext := GetUserContext(c)
	stats, err := userContext.GetDashboardStats()
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	result := buildDashboardStats(stats)
	Success(c, result, http.StatusOK)
}
