package middleware

import (
	"errors"
	"fmt"
	"github.com/gin-gonic/gin"
	common "go_upload_sync/app/common/function"
	"go_upload_sync/util"
	"github.com/ichunt2019/cfg/lib"
	"runtime/debug"
)

// RecoveryMiddleware捕获所有panic,并且返回错误信息
func RecoveryMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		//fmt.Println(lib.Instance("proxy").GetString("base.debug_mode"))
		defer func() {
			if err := recover(); err != nil {
				//先做一下日志记录
				//fmt.Println(string(debug.Stack()))
				util.ComLogNotice(c, "_com_panic", map[string]interface{}{
					"error": fmt.Sprint(err),
					"stack": string(debug.Stack()),
				})
				if lib.Instance("proxy").GetString("base.debug_mode") != "debug" {
					//ResponseError(c, 500, errors.New("内部错误"))
					common.Output(c,500,"内部错误",nil)
					return
				} else {
					common.Output(c,500,"内部错误",errors.New(fmt.Sprint(err)))
					return
				}
			}
		}()
		c.Next()
	}
}