package middlewares

import (
	"crypto/subtle"
	"net/http"

	"github.com/gin-gonic/gin"

	"GoMembership/internal/config"
)

func APIKeyMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		clientAPIKey := c.GetHeader("X-API-Key")

		if clientAPIKey == "" {
			c.JSON(http.StatusUnauthorized, gin.H{"error": "API key is missing"})
			c.Abort()
			return
		}

		// Using subtle.ConstantTimeCompare to mitigate timing attacks
		if subtle.ConstantTimeCompare([]byte(clientAPIKey), []byte(config.Auth.APIKEY)) != 1 {
			c.JSON(http.StatusUnauthorized, gin.H{"error": "Invalid API key"})
			c.Abort()
			return
		}

		c.Next()
	}
}
