package middleware

import (
	"git.sxidc.com/go-tools/api_binding/mqtt_binding/mqtt_client/router"
	"git.sxidc.com/service-supports/fslog"
	"runtime/debug"
	"slices"
	"time"
)

func Logger(skipTopics []string) router.Handler {
	return func(item *router.Item, data []byte) {
		start := time.Now()
		item.Next()

		if slices.Contains(skipTopics, item.Topic) {
			return
		}

		end := time.Now()
		fslog.Info("| %d | %s |",
			end.Sub(start),
			item.Topic,
		)
	}
}

func Recovery() router.Handler {
	return func(item *router.Item, data []byte) {
		defer func() {
			err := recover()
			if err != nil {
				fslog.Error("%s", debug.Stack())
			}
		}()

		item.Next()
	}
}