const { useEffect: useEffectAD, useState: useStateAD } = React; window.AdDrawer = function AdDrawer({ ad, onClose }) { const [playing, setPlaying] = useStateAD(false); useEffectAD(() => { if (!ad) return; setPlaying(!!ad.__autoPlay); const onKey = (e) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [ad?.id, ad?.__autoPlay]); if (!ad) return null; const p = PLATFORMS[ad.platform] || PLATFORMS.foreplay; const raw = ad.raw && typeof ad.raw === 'object' ? ad.raw : {}; const creativeUrl = ad.creativeUrl || ad.videoUrl || raw.creative_url || raw.creativeUrl || raw.video || raw.video_url || raw.video_hd_url || raw.video_sd_url || raw.videoMediaPath || raw.video_media_path || null; const thumbnailUrl = ad.thumbnailUrl || raw.thumbnail_url || raw.thumbnail || raw.thumb_url || raw.thumb || raw.image_url || raw.image || null; const transcript = ad.transcript || []; const transcriptSource = ad.transcriptSource || ad.transcript_source || raw.transcript_source || raw.transcriptSource || (raw.brandsearch_transcript && raw.brandsearch_transcript.status) || (transcript.length > 0 ? 'generated' : 'missing'); const isFallbackTranscript = ['copy_fallback', 'fallback', 'unavailable', 'empty'].includes(transcriptSource) || ad.isVoiceTranscript === false; const transcriptProvider = ad.transcriptProvider || ad.transcript_provider || raw.transcript_provider || (raw.brandsearch_transcript && raw.brandsearch_transcript.provider) || null; const transcriptModel = ad.transcriptModel || ad.transcript_model || raw.transcript_model || (raw.brandsearch_transcript && raw.brandsearch_transcript.model) || null; const providerLabel = transcriptProvider ? ` · ${transcriptProvider}${transcriptModel ? ` / ${transcriptModel}` : ''}` : ''; const transcriptSourceLabel = isFallbackTranscript ? 'Fallback copy' : transcriptSource === 'generated_cached' ? `Real transcript (cached)${providerLabel}` : transcriptSource === 'generated' ? `Real transcript${providerLabel}` : transcriptSource === 'source_transcription' ? 'Source transcript' : transcriptSource === 'existing' ? `Real transcript${providerLabel}` : 'Transcript status unknown'; const metricChips = RESILIA_ADAPT.metricChips(ad); const scoreText = (typeof ad.score === 'number') ? (ad.score > 10 ? Math.round(ad.score) : ad.score.toFixed(1)) : '—'; const copyReasoning = () => { if (ad.reasoning) navigator.clipboard?.writeText(ad.reasoning); }; const copyTranscript = () => { const text = ad.transcriptRaw || transcript.map(l => `[${l.t}] ${l.body}`).join('\n'); if (text) navigator.clipboard?.writeText(text); }; const copyVideoUrl = () => { if (creativeUrl) navigator.clipboard?.writeText(creativeUrl); }; return ( <>
); };