import { Handlers } from "$fresh/server.ts";
import { SERVER_STATE } from "../../state/serverState.ts";
import { getActivePlayers } from "../../util/players.ts";

export const handler: Handlers = {
  GET(_req, _ctx) {
    let listener: (e: CustomEvent) => void;
    const body = new ReadableStream({
      async start(controller){
        console.log('did the thing')
        if (SERVER_STATE.status !== 'running') return;
        const players = await getActivePlayers();

        const event = `event:players\ndata:${JSON.stringify(players)}\n\n`
        
        controller.enqueue(event);
        console.log('sent the thing')

        listener = async (e: CustomEvent<string>) => {
          console.log('message received')
          if (e.detail.includes('joined the game') || e.detail.includes('lost connection')) {
            console.log('connection change')
            const players = await getActivePlayers();
            const event = `event: players\ndata: ${JSON.stringify(players)}\n\n`

            controller.enqueue(event);
          }
        }

        globalThis.addEventListener('stdoutmsg' as any, listener);
        console.log('listened the thing')
      },
      cancel() {
        console.log('cancelled')
        globalThis.removeEventListener('stdoutmsg' as any, listener);
      }
    })

    return new Response(body.pipeThrough(new TextEncoderStream()), { headers: {
      "Content-Type": "text/event-stream",
      "cache-control": "no-cache"
    }}); 
  }
}