/** A compatibilidade do ficheiro não significa que a campanha tenha sido publicada. */
function DestinosVideoCriar({slug,campanha,porAprovar=null}){
 const [relatorio,setRelatorio]=React.useState(null),[ocupado,setOcupado]=React.useState(false),[erro,setErro]=React.useState(''),vivo=React.useRef(true);
 React.useEffect(()=>{vivo.current=true;return()=>{vivo.current=false}},[]);
 const verificar=async()=>{if(ocupado)return;setOcupado(true);setErro('');setRelatorio(null);try{
  const r=await fetch(`/api/${slug}/campanhas/${campanha.id}/video-criar/destinos`),j=await r.json();if(!r.ok)throw Error(j.error||'Não foi possível verificar os destinos.');if(vivo.current)setRelatorio(j);
 }catch(e){if(vivo.current)setErro(e.message)}finally{if(vivo.current)setOcupado(false)}};
 // O que a secção Anúncios escreve à volta do vídeo, só dos canais desta campanha (era «segue o compositor habitual», 3 Nov).
 const acompanha=[(campanha.canais||[]).includes('social')&&'o texto do post',(campanha.canais||[]).includes('dooh')&&'a imagem parada dos painéis'].filter(Boolean).join(' e ');
 const videoId=campanha.briefing.criacao_video_id,base=`/api/${slug}/criar/video/${encodeURIComponent(videoId)}`;
 return <section className="border border-border bg-card p-5 space-y-4">
  {/* Com o vídeo ainda na fila ou por rever, não se diz «aprovado» (utilizadora virgem, ronda 6). */}
  <h2 className="text-xl">{porAprovar==='video_por_rever'?'O vídeo, por rever':porAprovar==='preparado'?'O vídeo, fora da fila':['recusado','interrompido'].includes(porAprovar)?'O vídeo, não foi criado':porAprovar==='fila'?'O vídeo, na fila':porAprovar?'O vídeo, a ser criado':'O vídeo aprovado'}</h2>
  <VideosLadoALado slug={slug} videoId={videoId}/>
  <p className="text-sm text-muted-foreground max-w-prose">Este rascunho ainda não o envia.{acompanha&&` Em Anúncios, mais abaixo, escreve-se só o que o acompanha: ${acompanha}.`}</p>
  <div className="flex flex-wrap gap-4 text-sm"><a className="underline underline-offset-4" href={`/${slug}/criar?video=${encodeURIComponent(videoId)}`}>Abrir em Criar vídeo</a>{!porAprovar&&<a className="underline underline-offset-4" href={`${base}/pacote`}>Descarregar pacote para entrega manual</a>}</div>
  <button className="border border-border px-4 py-2 text-sm outline-none hover:bg-muted focus-visible:ring-1 focus-visible:ring-primary disabled:opacity-50" disabled={ocupado} onClick={verificar}>{ocupado?'A verificar…':relatorio?'Voltar a verificar formatos':'Verificar formatos nos destinos'}</button>
  {erro&&<p role="alert" className="text-sm">{erro}</p>}
  {relatorio&&<div className="space-y-3" aria-live="polite">
   {!relatorio.destinos.length?<p className="text-sm">Ainda não há destinos nesta campanha. Escolhe as lojas, painéis ou redes antes de verificar a entrega.</p>:<ul className="space-y-3">{relatorio.destinos.map((d,i)=><li key={i} className="border-t border-border pt-3 text-sm space-y-1"><p>{d.nome}{d.formato?` · ${d.formato}`:''}</p><p className="text-muted-foreground">{d.compativel?'Ficheiro compatível com este formato.':d.motivo}</p>{d.compativel&&<a className="inline-block underline underline-offset-4" href={`${base}/ficheiros/${encodeURIComponent(d.ficheiro)}`} download>Descarregar para entrega manual</a>}</li>)}</ul>}
   <p className="text-sm text-muted-foreground max-w-prose">Esta verificação compara as medidas e as provas técnicas guardadas. O download confere a integridade do ficheiro. Não confirma envio, publicação ou condições da campanha.</p>
  </div>}
 </section>;
}
