import { StorageStats } from "@app/services/fileStorage";

/**
 * Storage operation types for incremental updates
 */
export type StorageOperation = 'add' | 'remove' | 'clear';

/**
 * Update storage stats incrementally based on operation
 */
export function updateStorageStatsIncremental(
  currentStats: StorageStats,
  operation: StorageOperation,
  files: File[] = []
): StorageStats {
  const filesSizeTotal = files.reduce((total, file) => total + file.size, 0);
  
  switch (operation) {
    case 'add':
      return {
        ...currentStats,
        used: currentStats.used + filesSizeTotal,
        available: currentStats.available - filesSizeTotal,
        fileCount: currentStats.fileCount + files.length
      };
      
    case 'remove':
      return {
        ...currentStats,
        used: Math.max(0, currentStats.used - filesSizeTotal),
        available: currentStats.available + filesSizeTotal,
        fileCount: Math.max(0, currentStats.fileCount - files.length)
      };
      
    case 'clear':
      return {
        ...currentStats,
        used: 0,
        available: currentStats.quota || currentStats.available,
        fileCount: 0
      };
      
    default:
      return currentStats;
  }
}

/**
 * Check storage usage and return warning message if needed
 */
export function checkStorageWarnings(stats: StorageStats): string | null {
  if (!stats.quota || stats.used === 0) return null;
  
  const usagePercent = (stats.used / stats.quota) * 100;
  
  if (usagePercent > 90) {
    return 'Warning: Storage is nearly full (>90%). Browser may start clearing data.';
  } else if (usagePercent > 80) {
    return 'Storage is getting full (>80%). Consider removing old files.';
  }
  
  return null;
}

/**
 * Calculate storage usage percentage
 */
export function getStorageUsagePercent(stats: StorageStats): number {
  return stats.quota ? (stats.used / stats.quota) * 100 : 0;
}