package handler

import (
	"net/http"
	"reflect"
	"strings"

	"gitea.frenchtouch.duckdns.org/kratisto/budget-backend/internal/storage/validators"
	"gitea.frenchtouch.duckdns.org/kratisto/budget-backend/internal/utils"

	"github.com/gin-gonic/gin"
	"gopkg.in/go-playground/validator.v9"
)

type Config struct {
	Mock            bool
	DBConnectionURI string
	Port            int
	LogLevel        string
	LogFormat       string
}

type Context struct {
	Validator *validator.Validate
}

func NewContext() *Context {
	return &Context{Validator: newValidator()}
}
func newValidator() *validator.Validate {
	va := validator.New()

	va.RegisterTagNameFunc(func(fld reflect.StructField) string {
		name := strings.SplitN(fld.Tag.Get("json"), ",", 2)
		if len(name) < 1 {
			return ""
		}
		return name[0]
	})

	for k, v := range validators.CustomValidators {
		if v.Validator != nil {
			err := va.RegisterValidationCtx(k, v.Validator)
			if err != nil {
				return nil
			}
		}
	}

	return va
}

func (hc *Context) GetHealth(c *gin.Context) {
	utils.JSON(c.Writer, http.StatusNoContent, nil)
}
