package config

import (
	"kpt-pasture/http/middleware"
	"strconv"

	"gitee.com/xuyiping_admin/pkg/valid"

	"gitee.com/xuyiping_admin/pkg/apierr"
	"gitee.com/xuyiping_admin/pkg/ginutil"
	"github.com/gin-gonic/gin"
)

func BarnTypeOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.BarnTypeOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func BarnListOptions(c *gin.Context) {
	penTypeStr := c.Query("pen_type")
	penTypeId, _ := strconv.Atoi(penTypeStr)
	if err := valid.Validate(penTypeId, valid.Required, valid.Min(-1)); err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.BarnListOptions(c, penTypeId)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func DiseaseTypeOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.DiseaseTypeOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}
func DiseaseOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.DiseaseOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}
func BreedStatusOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.BreedStatusOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func CowKindOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CowKindOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func CowSourceOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CowSourceOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func CowStatusOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CowStatusOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func CowTypeOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CowTypeOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func CowTransferPenReasonOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CowTransferPenReasonOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func SystemUserOptions(c *gin.Context) {
	depIdStr := c.Query("dept_id")
	depId, _ := strconv.Atoi(depIdStr)
	if err := valid.Validate(depId, valid.Required, valid.Min(-1)); err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.SystemUserOptions(c, depId)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func BullListOptions(c *gin.Context) {
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.BullOptions(c)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}

func SystemBaseConfigOptions(c *gin.Context) {
	optionName := c.Query("option_name")
	if err := valid.Validate(optionName, valid.Required, valid.Length(1, 20)); err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	res, err := middleware.Dependency(c).StoreEventHub.OpsService.SystemBaseConfigOptions(c, optionName)
	if err != nil {
		apierr.ClassifiedAbort(c, err)
		return
	}
	ginutil.JSONResp(c, res)
}