import { useState } from 'react' import { Plus, Upload, Trash2, Globe, Image as ImageIcon } from 'lucide-react' import { useLanguage } from '../i18n/LanguageContext' import Modal from './Modal' import ArtefactVersionTimeline from './ArtefactVersionTimeline' const AVAILABLE_LANGUAGES = [ { code: 'AR', label: '\u0627\u0644\u0639\u0631\u0628\u064A\u0629' }, { code: 'EN', label: 'English' }, { code: 'FR', label: 'Fran\u00E7ais' }, { code: 'ID', label: 'Bahasa Indonesia' }, ] export function ArtefactDetailVersionsTab({ artefact, versions, selectedVersion, versionData, uploading, uploadProgress, onSelectVersion, onCreateVersion, onAddLanguage, onDeleteLanguage, onFileUpload, onDeleteAttachment, onAddDriveVideo, getDriveEmbedUrl, }) { const { t } = useLanguage() const [showNewVersionModal, setShowNewVersionModal] = useState(false) const [newVersionNotes, setNewVersionNotes] = useState('') const [copyFromPrevious, setCopyFromPrevious] = useState(false) const [creatingVersion, setCreatingVersion] = useState(false) const [showLanguageModal, setShowLanguageModal] = useState(false) const [languageForm, setLanguageForm] = useState({ language_code: '', language_label: '', content: '' }) const [savingLanguage, setSavingLanguage] = useState(false) const [confirmDeleteLangId, setConfirmDeleteLangId] = useState(null) const [confirmDeleteAttId, setConfirmDeleteAttId] = useState(null) const [dragOver, setDragOver] = useState(false) const [driveUrl, setDriveUrl] = useState('') const handleCreateVersion = async () => { setCreatingVersion(true) try { await onCreateVersion({ notes: newVersionNotes || `Version ${(versions[versions.length - 1]?.version_number || 0) + 1}`, copy_from_previous: artefact.type === 'copy' ? copyFromPrevious : false, }) setShowNewVersionModal(false) setNewVersionNotes('') setCopyFromPrevious(false) } finally { setCreatingVersion(false) } } const handleAddLanguage = async () => { if (!languageForm.language_code || !languageForm.language_label || !languageForm.content) return setSavingLanguage(true) try { await onAddLanguage(languageForm) setShowLanguageModal(false) setLanguageForm({ language_code: '', language_label: '', content: '' }) } finally { setSavingLanguage(false) } } const handleDeleteLanguage = async (textId) => { await onDeleteLanguage(textId) setConfirmDeleteLangId(null) } const handleDeleteAttachment = async (attId) => { await onDeleteAttachment(attId) setConfirmDeleteAttId(null) } const handleVideoDrop = (e) => { e.preventDefault() setDragOver(false) const file = e.dataTransfer.files?.[0] if (file && file.type.startsWith('video/')) { onFileUpload(file) } } const handleAddDriveVideo = async () => { if (!driveUrl.trim()) return await onAddDriveVideo(driveUrl) setDriveUrl('') } return ( <>
{/* Version Timeline */}

{t('artefacts.versions')}

{/* Type-specific content */} {versionData && selectedVersion && (
{/* COPY TYPE: Language entries */} {artefact.type === 'copy' && (

{t('artefacts.languages')}

{versionData.texts && versionData.texts.length > 0 ? (
{versionData.texts.map(text => (
{text.language_code} {text.language_label}
{text.content}
))}
) : (

{t('artefacts.noLanguages')}

)}
)} {/* DESIGN TYPE: Image gallery */} {artefact.type === 'design' && (

{t('artefacts.imagesLabel')}

{versionData.attachments && versionData.attachments.length > 0 ? (
{versionData.attachments.map(att => (
{att.original_name}
{att.original_name}
))}
) : (

{t('artefacts.noImages')}

)}
)} {/* VIDEO TYPE: Files and Drive links -- all inline */} {artefact.type === 'video' && (

{t('artefacts.videosLabel')}

{/* Existing attachments */} {versionData.attachments && versionData.attachments.length > 0 && (
{versionData.attachments.map(att => (
{att.drive_url ? (
{t('artefacts.googleDriveVideo')}