import { Injectable, Inject, Logger } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import axios from 'axios';
import { Buffer } from 'buffer';
import { EventEmitter } from 'events';
import * as fs from 'fs';
import moment from 'moment';
import * as path from 'path';
export class TextToSpeechService extends EventEmitter {
  private nextExpectedIndex = 0;
  private speechBuffer = {};
  private readonly logger = new Logger(TextToSpeechService.name);

  constructor() {
    super();
  }

  async generate(gptReply: any, interactionCount: number) {
    const { partialResponseIndex, partialResponse } = gptReply;

    if (!partialResponse) {
      return;
    }

    try {

      console.time('deepgram audio convert time');
      const response = await axios.post(
        'https://api.deepgram.com/v1/speak?model=aura-asteria-en',
        { text: partialResponse },
        {
          headers: {
            'Content-Type': 'application/json',
            Authorization: `Token ${process.env.DEEPGRAM_API_KEY}`,
          },
          responseType: 'arraybuffer', // To get the response as a buffer
        }
      );

      if (response.status === 200) {
        try {
          const audioArrayBuffer = response.data;
          // let folder_path = path.resolve(__dirname + '/assets/' + 'data.mp3');
          // fs.writeFileSync(folder_path, audioArrayBuffer);
          const base64String = Buffer.from(audioArrayBuffer).toString('base64');
          console.timeEnd('deepgram audio convert time');

          this.emit(
            'speech',
            partialResponseIndex,
            base64String,
            partialResponse,
            interactionCount
          );
        } catch (err) {
          this.logger.error('Error processing audio buffer', err);
        }
      } else {
        this.logger.error('Deepgram TTS error:', response.statusText);
      }
    } catch (err) {
      this.logger.error('Error occurred in TextToSpeech service', err);
    }
  }
}
