// utils/textToSpeech.ts
import audioContext from '@/lib/audioContext';

const playAudio = (audioBuffer: AudioBuffer) => {
  const source = audioContext.createBufferSource();
  source.buffer = audioBuffer;
  source.connect(audioContext.destination);
  source.start();
};

export const streamTextToSpeech = async (text: string) => {
  try {
    const response = await fetch('/api/openai-speech/', {
      method: 'POST',
      body: JSON.stringify({
        text: text,
      }),
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    if (!response.body) {
      return;
    }

    const reader = response.body.getReader();
    let audioBuffer = new ArrayBuffer(0);

    while (true) {
      const { done, value } = await reader.read();

      if (done) break;

      // Append new chunk to buffer
      const newBuffer = new ArrayBuffer(audioBuffer.byteLength + value.length);
      const newView = new Uint8Array(newBuffer);
      newView.set(new Uint8Array(audioBuffer));
      newView.set(value, audioBuffer.byteLength);
      audioBuffer = newBuffer;
    }

    const finalAudio = await audioContext.decodeAudioData(audioBuffer);
    playAudio(finalAudio);
  } catch (error) {
    console.error('TTS Streaming error:', error);
  }
};
