package room

import (
	"github.com/go-chi/chi"

	"demodesk/neko/internal/api/utils"
	"demodesk/neko/internal/types"
)

type RoomHandler struct {
	sessions   types.SessionManager
	remote     types.RemoteManager
	broadcast  types.BroadcastManager
	websocket  types.WebSocketHandler
}

func New(
	sessions types.SessionManager,
	remote types.RemoteManager,
	broadcast types.BroadcastManager,
	websocket types.WebSocketHandler,
) *RoomHandler {
	// Init

	return &RoomHandler{
		sessions:   sessions,
		remote:     remote,
		broadcast:  broadcast,
		websocket:  websocket,
	}
}

func (h *RoomHandler) Router(
	usersOnly utils.HttpMiddleware,
	adminsOnly utils.HttpMiddleware,
) *chi.Mux {
	r := chi.NewRouter()

	r.Route("/screen", func(r chi.Router) {
		r.With(usersOnly).Get("/", h.ScreenConfiguration)
		r.With(adminsOnly).Post("/", h.ScreenConfigurationChange)

		r.With(adminsOnly).Get("/configurations", h.ScreenConfigurationsList)
	})

	r.With(adminsOnly).Route("/clipboard", func(r chi.Router) {
		r.Get("/", h.ClipboardRead)
		r.Post("/", h.ClipboardWrite)
	})

	return r
}