package v1

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"sec-cycle-scan/common"
	"sec-cycle-scan/model/response"
	"sec-cycle-scan/service"
)

type TaskApi struct{}

type UpdateStateReq struct {
	VulIDs []string `json:"vul_ids"`
	State  int      `json:"state"`
}

// UpdateSecretState
// @Tags
// @Summary  更改秘钥状态
func UpdateSecretState(c *gin.Context) {

	var req UpdateStateReq

	err := c.ShouldBindJSON(&req)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}

	count, err := service.UpdateSecretState(req.VulIDs, req.State)
	if err != nil {
		common.LOG.Error(fmt.Sprintf("secret status update failed. err: %s", err))
		response.FailWithMessage(fmt.Sprintf("task status update failed. err: %s", err), c)
		return
	}

	response.OkWithDetailed("", fmt.Sprintf("task status update successful. count:%d", count), c)
}

func GetSecretInfo(c *gin.Context) {

	vulUnqId := c.Param("vul_unq_id")

	if vulUnqId == "" {
		response.FailWithMessage("Incorrect vul_unq_id passed.", c)
		return
	}

	info, err := service.GetSecretInfo(vulUnqId)
	if err != nil {
		response.FailWithMessage(fmt.Sprintf("Failed to query SecretInfo. err: %s", err), c)
		return
	}

	response.OkWithDetailed(info, "", c)
}

func GetSecretList(c *gin.Context) {

	repoName := c.Query("repo_name")

	if repoName == "" {
		response.FailWithMessage("Incorrect repo_name passed.", c)
		return
	}

	res, err := service.GetSecretListByRepo(repoName)
	if err != nil {
		response.FailWithMessage(fmt.Sprintf("Failed to query SecretList. err: %s", err), c)
		return
	}

	response.OkWithDetailed(res, "", c)
}
