import { EntityObject } from '@DocumentsManager/models/entity' /** * Get the appropriate icon for a file based on its MIME type */ export function getFileIcon(entity: EntityObject): string { const mime = entity.properties.mime || '' if (!mime) return 'mdi-file' if (mime.startsWith('image/')) return 'mdi-file-image' if (mime.startsWith('video/')) return 'mdi-file-video' if (mime.startsWith('audio/')) return 'mdi-file-music' if (mime.startsWith('text/')) return 'mdi-file-document' if (mime === 'application/pdf') return 'mdi-file-pdf-box' if (mime.includes('zip') || mime.includes('tar') || mime.includes('compressed')) return 'mdi-folder-zip' if (mime.includes('word') || mime.includes('document')) return 'mdi-file-word' if (mime.includes('excel') || mime.includes('spreadsheet')) return 'mdi-file-excel' if (mime.includes('powerpoint') || mime.includes('presentation')) return 'mdi-file-powerpoint' return 'mdi-file' } /** * Format file size in human readable format */ export function formatSize(bytes: number): string { const safeBytes = Number.isFinite(bytes) ? bytes : 0 if (safeBytes === 0) return '0 B' const k = 1024 const sizes = ['B', 'KB', 'MB', 'GB', 'TB'] const i = Math.floor(Math.log(safeBytes) / Math.log(k)) return parseFloat((safeBytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i] } /** * Format date string to localized format */ export function formatDate(value: Date | string | null | undefined): string { if (!value) return '—' const date = value instanceof Date ? value : new Date(value) if (Number.isNaN(date.getTime())) return '—' return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', }) } /** * Get upload status icon */ export function getUploadStatusIcon(status: string): string { switch (status) { case 'pending': return 'mdi-clock-outline' case 'uploading': return 'mdi-loading mdi-spin' case 'completed': return 'mdi-check-circle' case 'error': return 'mdi-alert-circle' default: return 'mdi-file' } } /** * Get upload status color */ export function getUploadStatusColor(status: string): string { switch (status) { case 'pending': return 'grey' case 'uploading': return 'primary' case 'completed': return 'success' case 'error': return 'error' default: return 'grey' } }