package middleware

import (
	"strings"

	"github.com/gin-gonic/gin"
)

const sensitiveNoStoreCacheControl = "no-store, no-cache, must-revalidate, max-age=0"

// NoStoreSensitiveResponses prevents browser or intermediary caching for auth routes.
func NoStoreSensitiveResponses() gin.HandlerFunc {
	return func(c *gin.Context) {
		if shouldDisableCaching(c.FullPath(), c.Request.URL.Path) {
			headers := c.Writer.Header()
			headers.Set("Cache-Control", sensitiveNoStoreCacheControl)
			headers.Set("Pragma", "no-cache")
			headers.Set("Expires", "0")
			headers.Set("Surrogate-Control", "no-store")
		}

		c.Next()
	}
}

func shouldDisableCaching(routePath, requestPath string) bool {
	path := strings.TrimSpace(routePath)
	if path == "" {
		path = strings.TrimSpace(requestPath)
	}
	return strings.HasPrefix(path, "/api/v1/auth")
}
