package room

import (
	"net/http"

	"demodesk/neko/internal/utils"
	"demodesk/neko/internal/types/event"
	"demodesk/neko/internal/types/message"
)

type BroadcastStatusPayload struct {
	URL string `json:"url,omitempty"`
	IsActive bool `json:"is_active"`
}

func (h *RoomHandler) broadcastStatus(w http.ResponseWriter, r *http.Request) {
	broadcast := h.capture.Broadcast()
	utils.HttpSuccess(w, BroadcastStatusPayload{
		IsActive: broadcast.Enabled(),
		URL:      broadcast.Url(),
	})
}

func (h *RoomHandler) boradcastStart(w http.ResponseWriter, r *http.Request) {
	data := &BroadcastStatusPayload{}
	if !utils.HttpJsonRequest(w, r, data) {
		return
	}

	if data.URL == "" {
		utils.HttpBadRequest(w, "Missing broadcast URL.")
		return
	}

	broadcast := h.capture.Broadcast()
	if broadcast.Enabled() {
		utils.HttpUnprocessableEntity(w, "Server is already broadcasting.")
		return
	}

	if err := broadcast.Start(data.URL); err != nil {
		utils.HttpInternalServerError(w, err)
		return
	}

	h.sessions.AdminBroadcast(
		message.BroadcastStatus{
			Event:    event.BORADCAST_STATUS,
			IsActive: broadcast.Enabled(),
			URL:      broadcast.Url(),
		}, nil)

	utils.HttpSuccess(w)
}

func (h *RoomHandler) boradcastStop(w http.ResponseWriter, r *http.Request) {
	broadcast := h.capture.Broadcast()
	if !broadcast.Enabled() {
		utils.HttpUnprocessableEntity(w, "Server is not broadcasting.")
		return
	}

	broadcast.Stop()

	h.sessions.AdminBroadcast(
		message.BroadcastStatus{
			Event:    event.BORADCAST_STATUS,
			IsActive: broadcast.Enabled(),
			URL:      broadcast.Url(),
		}, nil)

	utils.HttpSuccess(w)
}