package infra

import (
	"fmt"
	"net/http"

	"nhooyr.io/websocket"
)

// WSUpgrader hace el upgrade de una conexion HTTP a WebSocket usando nhooyr.io/websocket.
// Si origins contiene "*" se acepta cualquier origen (InsecureSkipVerify=true).
// En caso contrario, OriginPatterns valida el header Origin del cliente con filepath.Match.
// Retorna el *websocket.Conn listo para Read/Write o un error si el handshake falla.
func WSUpgrader(w http.ResponseWriter, r *http.Request, origins []string) (*websocket.Conn, error) {
	opts := &websocket.AcceptOptions{}

	allowAny := false
	for _, o := range origins {
		if o == "*" {
			allowAny = true
			break
		}
	}

	if allowAny {
		opts.InsecureSkipVerify = true
	} else {
		opts.OriginPatterns = origins
	}

	conn, err := websocket.Accept(w, r, opts)
	if err != nil {
		return nil, fmt.Errorf("ws upgrade: %w", err)
	}
	return conn, nil
}
