const { getFileListFileByOutpoint } = require('server/lbrynet');
const logger = require('winston');

function delay(t) {
  return new Promise(function(resolve) {
    setTimeout(resolve, t);
  });
}

const awaitFileSize = (outpoint, size, interval, timeout) => {
  logger.debug('awaitFileSize');
  let start = Date.now();
  function checkFileList() {
    logger.debug('checkFileList');
    return getFileListFileByOutpoint(outpoint).then(result => {
      const { items: fileInfos } = result;
      const fileInfo = fileInfos[0];
      logger.debug('File List Result', fileInfo);
      if (fileInfo.completed === true || fileInfo.written_bytes > size) {
        logger.debug('FILE READY');
        return 'ready';
      } else if (timeout !== 0 && Date.now() - start > timeout) {
        throw new Error('Timeout on awaitFileSize');
      } else {
        return delay(interval).then(checkFileList);
      }
    });
  }
  return checkFileList();
};

module.exports = awaitFileSize;