package websocketutil

import (
	"github.com/gorilla/websocket"
	"log"
	"net"
	"net/http"
)

type WebSocketAddr string

func (r WebSocketAddr) Network() string {
	return "websocket"
}
func (r WebSocketAddr) String() string {
	return string(r)
}

var upgrader = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
}

func handleWebSocket(w http.ResponseWriter, r *http.Request,
	handler func(w http.ResponseWriter, r *http.Request, websockerConnection net.Conn)) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		log.Println("Error upgrading to WebSocket:", err)
		return
	}
	wsConn := NewWebSocketConn(conn)
	defer wsConn.Close()

	handler(w, r, wsConn)
}

type WebSocketService struct {
	Handler func(w http.ResponseWriter, r *http.Request, conn net.Conn)
}

func (endpoint *WebSocketService) Handle(w http.ResponseWriter, r *http.Request) {
	handleWebSocket(w, r, endpoint.Handler)
}