package api

import (
	"easyvqd/internal/core/vqd"
	"fmt"
	"git.lnton.com/lnton/pkg/reason"
	"github.com/gin-gonic/gin"
	"strconv"
)

func (a VqdTaskAPI) findVqdTaskTemplate(c *gin.Context, in *vqd.FindVqdTaskTemplateInput) (any, error) {
	items, total, err := a.core.FindVqdTaskTemplate(c.Request.Context(), in)
	rows := make([]map[string]interface{}, 0)

	for _, item := range items {
		//row := structs.Map(item)
		row := make(map[string]interface{})
		row["id"] = item.ID
		row["name"] = item.Name
		row["des"] = item.Des
		row["is_default"] = item.IsDefault
		row["vqd_config"] = item.VqdConfig
		row["vqd_lgt_dark"] = item.VqdLgtDark
		row["vqd_blue"] = item.VqdBlue
		row["vqd_clarity"] = item.VqdClarity
		row["vqd_shark"] = item.VqdShark
		row["vqd_freeze"] = item.VqdFreeze
		row["vqd_color"] = item.VqdColor
		row["vqd_occlusion"] = item.VqdOcclusion
		row["vqd_noise"] = item.VqdNoise
		row["vqd_contrast"] = item.VqdContrast
		row["vqd_mosaic"] = item.VqdMosaic
		row["vqd_flower"] = item.VqdFlower
		row["created_at"] = item.CreatedAt
		row["updated_at"] = item.UpdatedAt

		rows = append(rows, row)
	}

	return gin.H{"items": rows, "total": total}, err
}
func (a VqdTaskAPI) getVqdTaskTemplate(c *gin.Context, _ *struct{}) (any, error) {
	ID, _ := strconv.Atoi(c.Param("id"))
	item, err := a.core.GetVqdTaskTemplate(c.Request.Context(), ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find vqdcms [%d] err [%s]`, ID, err.Error()))
	}
	row := make(map[string]interface{})

	row["id"] = item.ID
	row["name"] = item.Name
	row["is_default"] = item.IsDefault
	row["vqd_config"] = item.VqdConfig
	row["vqd_lgt_dark"] = item.VqdLgtDark
	row["vqd_blue"] = item.VqdBlue
	row["vqd_clarity"] = item.VqdClarity
	row["vqd_shark"] = item.VqdShark
	row["vqd_freeze"] = item.VqdFreeze
	row["vqd_color"] = item.VqdColor
	row["vqd_occlusion"] = item.VqdOcclusion
	row["vqd_noise"] = item.VqdNoise
	row["vqd_contrast"] = item.VqdContrast
	row["vqd_mosaic"] = item.VqdMosaic
	row["vqd_flower"] = item.VqdFlower
	row["des"] = item.Des
	row["created_at"] = item.CreatedAt
	row["updated_at"] = item.UpdatedAt

	return gin.H{"data": row}, err
}
func (a VqdTaskAPI) addVqdTaskTemplate(c *gin.Context, in *vqd.AddVqdTaskTemplateInput) (any, error) {
	template, err := a.core.AddVqdTaskTemplate(c.Request.Context(), in)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`add vqdcms err [%s]`, err.Error()))
	}
	out, _, err := a.core.FindVqdTemplateID(c.Request.Context(), template.ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find template all err [%s]`, err.Error()))
	}
	for _, task := range out {
		err = a.vqdSdkCore.UpdateTaskVqd(task.ID)
		if err != nil {
			continue
		}
	}

	return gin.H{"data": "OK!"}, err
}

func (a VqdTaskAPI) editVqdTaskTemplate(c *gin.Context, in *vqd.EditVqdTaskTemplateInput) (any, error) {
	ID, _ := strconv.Atoi(c.Param("id"))
	template, err := a.core.GetVqdTaskTemplate(c.Request.Context(), ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find vqdcms [%d] err [%s]`, ID, err.Error()))
	}

	_, err = a.core.EditVqdTaskTemplate(c.Request.Context(), in, ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`edit vqdcms err [%s]`, err.Error()))
	}
	out, _, err := a.core.FindVqdTemplateID(c.Request.Context(), template.ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find template all err [%s]`, err.Error()))
	}
	for _, task := range out {
		err = a.vqdSdkCore.UpdateTaskVqd(task.ID)
		if err != nil {
			continue
		}
	}
	return gin.H{"data": "OK!"}, err
}

func (a VqdTaskAPI) delVqdTaskTemplate(c *gin.Context, _ *struct{}) (any, error) {
	ID, _ := strconv.Atoi(c.Param("id"))
	info, err := a.core.GetVqdTaskTemplate(c.Request.Context(), ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`find vqdcms [%d] err [%s]`, ID, err.Error()))
	}
	if info.IsDefault {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`默认模板不支持删除 [%s] `, info.Name))
	}
	templateInfo, err := a.core.FindVqdTaskTemplateID(c.Request.Context(), ID)
	if err == nil {
		if templateInfo != nil {
			return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`模板关联【%s】任务,需先清理【%s】任务后才能删除模板！`, templateInfo.Name, templateInfo.Name))
		}
	}
	_, err = a.core.DelVqdTaskTemplate(c.Request.Context(), ID)
	if err != nil {
		return nil, reason.ErrServer.SetMsg(fmt.Sprintf(`del vqdcms [%d] err [%s]`, ID, err.Error()))
	}

	return gin.H{"data": "OK!"}, err
}
