package config

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

// UploadsGuard decide si una petición puede leer archivos de /uploads.
// Se inyecta desde main.go porque el paquete config no puede importar pkg/auth
// (sería una dependencia circular vía app). Se consulta en cada petición, no al
// registrar la ruta, así que puede definirse después de cargar la configuración.
//
// Mientras esté en nil, /uploads queda cerrado: es preferible que un archivo no
// cargue a que quede expuesto sin autenticación.
var UploadsGuard func(*fiber.Ctx) bool

// uploadsProtegidos bloquea el acceso anónimo a los archivos subidos.
// Antes /uploads se servía como estático público: sabiendo (o adivinando) la
// ruta se podía descargar el RUT de un cliente, una factura o un entregable sin
// iniciar sesión. Los clientes del portal siguen usando los endpoints de
// descarga dedicados, que además validan que el archivo les pertenezca.
func uploadsProtegidos(c *fiber.Ctx) error {
	if UploadsGuard != nil && UploadsGuard(c) {
		return c.Next()
	}
	// 404 en vez de 401 para no confirmar si el archivo existe.
	return c.Status(fiber.StatusNotFound).SendString("Not found")
}
