import { useState, useRef } from 'react' import { X, Upload, FileText, FolderOpen, Image as ImageIcon, Music, Film } from 'lucide-react' import { useLanguage } from '../i18n/LanguageContext' export function PostDetailAttachments({ attachments, uploading, onFileUpload, onDeleteAttachment, onAttachAsset, }) { const { t } = useLanguage() const imageInputRef = useRef(null) const [dragActive, setDragActive] = useState(false) const [showAssetPicker, setShowAssetPicker] = useState(false) const [availableAssets, setAvailableAssets] = useState([]) const [assetSearch, setAssetSearch] = useState('') const handleDrop = (e) => { e.preventDefault(); e.stopPropagation(); setDragActive(false) if (e.dataTransfer.files?.length) onFileUpload(e.dataTransfer.files) } const openAssetPicker = async () => { const { api } = await import('../utils/api') try { const data = await api.get('/assets') setAvailableAssets(Array.isArray(data) ? data : []) } catch { setAvailableAssets([]) } setAssetSearch('') setShowAssetPicker(true) } const handleAttachAsset = async (assetId) => { await onAttachAsset(assetId) setShowAssetPicker(false) } const images = attachments.filter(a => (a.mime_type || a.mimeType || '').startsWith('image/')) const audio = attachments.filter(a => (a.mime_type || a.mimeType || '').startsWith('audio/')) const videos = attachments.filter(a => (a.mime_type || a.mimeType || '').startsWith('video/')) const others = attachments.filter(a => { const mime = a.mime_type || a.mimeType || '' return !mime.startsWith('image/') && !mime.startsWith('audio/') && !mime.startsWith('video/') }) return (
{/* Images */}
{t('posts.images')} {images.length > 0 && ({images.length})}
{images.length > 0 && (
{images.map(att => { const attUrl = att.url || `/api/uploads/${att.filename}` const name = att.original_name || att.originalName || att.filename const attId = att.id || att._id return (
{name}
{name}
) })}
)}
{/* Audio */} {audio.length > 0 && (
{t('posts.audio')} ({audio.length})
{audio.map(att => { const attUrl = att.url || `/api/uploads/${att.filename}` const name = att.original_name || att.originalName || att.filename const attId = att.id || att._id return (
{name}
) })}
)} {/* Videos */} {videos.length > 0 && (
{t('posts.videos')} ({videos.length})
{videos.map(att => { const attUrl = att.url || `/api/uploads/${att.filename}` const name = att.original_name || att.originalName || att.filename const attId = att.id || att._id return (
) })}
)} {/* Other files */} {others.length > 0 && (
{t('posts.otherFiles')} ({others.length})
{others.map(att => { const attUrl = att.url || `/api/uploads/${att.filename}` const name = att.original_name || att.originalName || att.filename const attId = att.id || att._id return (
{name}
) })}
)} {/* Drag and drop zone */}
{ e.preventDefault(); setDragActive(true) }} onDragLeave={e => { e.preventDefault(); setDragActive(false) }} onDragOver={e => e.preventDefault()} onDrop={handleDrop} >

{dragActive ? t('posts.dropFiles') : t('posts.dragToUpload')}

{showAssetPicker && (

{t('posts.selectAssets')}

setAssetSearch(e.target.value)} placeholder={t('common.search')} className="w-full px-3 py-1.5 text-xs border border-border rounded-lg mb-2 focus:outline-none focus:ring-2 focus:ring-brand-primary/20 focus:border-brand-primary" />
{availableAssets .filter(a => !assetSearch || (a.original_name || a.filename || '').toLowerCase().includes(assetSearch.toLowerCase())) .map(asset => { const isImage = asset.mime_type?.startsWith('image/') const assetUrl = `/api/uploads/${asset.filename}` const name = asset.original_name || asset.filename return ( ) })}
{availableAssets.filter(a => !assetSearch || (a.original_name || a.filename || '').toLowerCase().includes(assetSearch.toLowerCase())).length === 0 && (

{t('posts.noAssetsFound')}

)}
)}
) }