package infra

import (
	"net/http"
	"strings"
)

// HTTPCORSMiddleware retorna un Middleware que setea headers CORS en cada respuesta.
// origins es la lista de origenes permitidos (usa "*" para cualquiera).
// methods es la lista de metodos HTTP permitidos.
func HTTPCORSMiddleware(origins []string, methods []string) Middleware {
	originsHeader := strings.Join(origins, ", ")
	methodsHeader := strings.Join(methods, ", ")

	return func(next http.Handler) http.Handler {
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			w.Header().Set("Access-Control-Allow-Origin", originsHeader)
			w.Header().Set("Access-Control-Allow-Methods", methodsHeader)
			w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")

			// Responder preflight OPTIONS sin pasar al siguiente handler
			if r.Method == http.MethodOptions {
				w.WriteHeader(http.StatusNoContent)
				return
			}

			next.ServeHTTP(w, r)
		})
	}
}
