package api

import (
	"fmt"
	"net/http"

	"git.elnu.com/ElnuDev/jichanorg/httputils"
	. "git.elnu.com/ElnuDev/jichanorg/shiritori/clients"
)

func GenerateApiEvents(clients *ClientSet) httputils.Handler {
	return httputils.GenerateSseHandler(func(w http.ResponseWriter, r *http.Request) {
		sendEvent := func(events ...httputils.SseEvent) {
			for _, event := range events {
				fmt.Fprint(w, event.Encode())
			}
			w.(http.Flusher).Flush()
		}
		sendEvent(clients.PlayerCountEvent(1))
		ctx := r.Context()
		channel := make(Client)
		clients.Connect(channel)
	outer:
		for {
			select {
			case <-ctx.Done():
				clients.Disconnect(channel)
				break outer
			case events := <-channel:
				sendEvent(events...)
			}
		}
	})
}