package v1

import (
	"cmdb-backend/models"
	"cmdb-backend/pkg/utils"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
)

func GetDomainList(c *gin.Context) {
	key := c.Query("key")
	vendorId, _ := strconv.Atoi(c.Query("vendor_id"))
	pageNum, _ := strconv.Atoi(c.Query("page_number"))
	pageSize, _ := strconv.Atoi(c.Query("page_size"))

	domainList := models.GetDomain(key, vendorId, utils.GetPage(pageNum, pageSize), pageSize)
	total := models.GetDomainTotal(key, vendorId)

	// 按照 DNS 记录数降序排列
	var generic []interface{}
	for _, f := range domainList {
		generic = append(generic, f)
	}
	utils.SortBodyByIndexDesc(generic, 6)
	domain := make([]models.Domain, 0)
	for _, f := range generic {
		domain = append(domain, f.(models.Domain))
	}

	c.JSON(http.StatusOK, utils.AmisResponse{
		Data: map[string]interface{}{
			"items": domain,
			"total": total,
		},
	})
}

// CreateDomain 暂时未使用
func CreateDomain(c *gin.Context) {
	query := models.Domain{}
	if err := c.ShouldBindJSON(&query); err != nil {
		utils.AmisError(c, "数据格式不正确，请修改后重新提交。")
		return
	}
	if query.Name == "" {
		utils.AmisError(c, "域名不能为空。")
		return
	}

	if err := models.CreateDomainRecord(&query); err != nil {
		utils.AmisError(c, "create domain record failed !")
		return
	}

	c.JSON(http.StatusOK, utils.AmisResponse{
		Msg: "域名添加成功。",
	})
}

func UpdateDomain(c *gin.Context) {
	query := models.Domain{}
	if err := c.ShouldBindJSON(&query); err != nil {
		utils.AmisError(c, "数据格式不正确，请修改后重新提交。")
		return
	}
	if query.Name == "" {
		utils.AmisError(c, "域名不能为空。")
		return
	}
	if err := models.UpdateDomainRecord(query); err != nil {
		utils.AmisError(c, "域名更新失败，请联系管理员或稍后重试。")
		return
	}

	c.JSON(http.StatusOK, utils.AmisResponse{
		Msg: "域名更新成功。",
	})

}

func DeleteDomain(c *gin.Context) {
	domainName := c.Param("domain_name")
	if err := models.DeleteDomainRecord(domainName); err != nil {
		utils.AmisError(c, "delete domain record failed !")
		return
	}

	c.JSON(http.StatusOK, utils.AmisResponse{
		Msg: "域名删除成功。",
	})
}
