package middleware

import (
	"context"
	"github.com/cloudwego/hertz/pkg/app"
	"github.com/sirupsen/logrus"
	"github.com/snowykami/neo-blog/pkg/resps"
	"github.com/snowykami/neo-blog/pkg/utils"
)

// UseCaptcha 中间件函数，用于X-Captcha-Token验证码
func UseCaptcha() app.HandlerFunc {
	captchaConfig := utils.Captcha.GetCaptchaConfigFromEnv()
	return func(ctx context.Context, c *app.RequestContext) {
		CaptchaToken := string(c.GetHeader("X-Captcha-Token"))
		if utils.IsDevMode && CaptchaToken == utils.Env.Get("CAPTCHA_DEV_PASSCODE", "dev_passcode") {
			// 开发模式直接通过密钥
			c.Next(ctx)
			return
		}
		ok, err := utils.Captcha.VerifyCaptcha(captchaConfig, CaptchaToken)
		if err != nil {
			logrus.Error("Captcha verification error:", err)
			resps.InternalServerError(c, "Captcha verification failed")
			c.Abort()
			return
		}
		if !ok {
			logrus.Warn("Captcha verification failed for token:", CaptchaToken)
			resps.Forbidden(c, "Captcha verification failed")
			c.Abort()
			return
		}
		c.Next(ctx) // 如果验证码验证成功，则继续下一个处理程序
		return
	}
}
