package router

import (
	"epur-pay/cache"
	"epur-pay/pkg/logger"
	"github.com/gin-gonic/gin"
	"net/http"
	"time"
)

func ClientIp(c *gin.Context) string {

	ip := c.Request.Header.Get("Cf-Connecting-Ip")

	if len(ip) <= 0 {
		ip = c.Request.Header.Get("X-Real-Ip")
	}
	if len(ip) <= 0 {
		ip = c.ClientIP()
	}
	return ip
}

func IPBlackList() gin.HandlerFunc {
	return func(c *gin.Context) {
		if cache.Global.Caches.BlackList.Check(ClientIp(c)) == true {
			logger.AccessLogger.Warnf("黑名单请求IP [%s]", ClientIp(c))
			c.AbortWithStatus(http.StatusServiceUnavailable)
			return
		}
	}
}

func Logs() gin.HandlerFunc {
	return func(c *gin.Context) {

		start := time.Now()

		c.Next()

		logger.RouterLogger.Infoln(
			time.Now().Sub(start),
			c.Request.Header.Get("Cf-Connecting-Ip"),
			c.Request.Header.Get("Cf-Ipcountry"),
			c.Request.Method,
			c.Writer.Status(),
			c.Request.RequestURI)
	}
}