import disk from 'diskusage';


export function verifyStorage (appContext) {
  const mountPath = appContext.env.FUTUREPORN_WORKDIR
  disk.check(mountPath, (err, info) => {
    if (err) {
      appContext.logger.log({ level: 'error', message: `Error retrieving disk usage for ${mountPath}: ${err}` });
      return;
    }

    const totalSize = info.total;
    const availableSize = info.available;
    const freeSize = info.free;

    appContext.logger.log({ 'level': 'info', message: `${mountPath} Disk Usage:` });
    appContext.logger.log({ 'level': 'info', message: `Total: ${bytesToSize(totalSize)}` });
    appContext.logger.log({ 'level': 'info', message: `Free: ${bytesToSize(freeSize)}` });
    appContext.logger.log({ 'level': 'info', message: `Available: ${bytesToSize(availableSize)}` });

    if (availableSize < 85899345920) appContext.logger.log({ 'level': 'warn', message: `⚠️ Available disk is getting low! ${bytesToSize(availableSize)}` });
    else if (availableSize < 42949672960) appContext.logger.log({ 'level': 'error', message: `⚠️☠️ AVAILABLE DISK IS TOO LOW! ${bytesToSize(availableSize)}` });
  });
}


// Helper function to convert bytes to human-readable format
export function bytesToSize(bytes) {
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  if (bytes === 0) return '0 Bytes';
  const i = Math.floor(Math.log2(bytes) / 10);
  return `${(bytes / Math.pow(1024, i)).toFixed(2)} ${sizes[i]}`;
}