package errorx

import "github.com/gofiber/fiber/v3"

// 全局实例
var DefaultSender = NewResponseSender()

// Middleware 错误处理中间件
func Middleware(c fiber.Ctx) error {
	err := c.Next()
	if err != nil {
		return DefaultSender.SendError(c, err)
	}
	return nil
}

// 便捷函数
func Wrap(err error) *AppError {
	if err == nil {
		return nil
	}

	if appErr, ok := err.(*AppError); ok {
		return &AppError{
			Code:        appErr.Code,
			Message:     appErr.Message,
			StatusCode:  appErr.StatusCode,
			Data:        appErr.Data,
			originalErr: appErr,
		}
	}

	return DefaultSender.handler.Handle(err)
}

func SendError(ctx fiber.Ctx, err error) error {
	return DefaultSender.SendError(ctx, err)
}
