import {EventMessage} from "fastify";

export async function* transformAsyncIterable(source: AsyncIterable<EventMessage>): AsyncIterable<string> {
  for await (const message of source) {
    yield serializeSSEEvent(message);
  }
  yield serializeSSEEvent({event: "end", data: "Stream closed"});
}

export function serializeSSEEvent(chunk: EventMessage): string {
  let payload = "";
  if(chunk.id) {
    payload += `id: ${chunk.id}\n`;
  }
  if(chunk.event) {
    payload += `event: ${chunk.event}\n`;
  }
  if(chunk.data) {
    payload += `data: ${chunk.data}\n`;
  }
  if(chunk.retry) {
    payload += `retry: ${chunk.retry}\n`;
  }
  if(!payload) {
    return "";
  }
  payload += "\n";
  return payload;
}