import { writeFile } from 'fs';
import { getAudioDurationInSeconds } from 'get-audio-duration';
import tmp from 'tmp';

const generateSampleLength = (buffer: Buffer) =>
  new Promise<number>((resolve, reject) => {
    tmp.file(function _tempFileCreated(err, path, fd, cleanupCallback) {
      if (err) reject(err);

      writeFile(path, buffer, (err) => {
        if (err) {
          cleanupCallback();
          reject(err);
          return;
        }
        getAudioDurationInSeconds(path)
          .then(async (duration) => {
            cleanupCallback();
            const durationInMs = Math.round(duration * 1000);
            resolve(durationInMs);
          })
          .catch((err) => {
            cleanupCallback();
            reject(err);
          });
      });
    });
  });

export default generateSampleLength;
