/** Ajustar não apaga a versão anterior e preparar não inicia uma chamada paga. */
function ResumoDestinosCriar({destinos=[]}){return <div className="space-y-2 text-sm"><p>Versões que vamos criar:</p><ul className="list-disc pl-5 space-y-1">{destinos.map((d,i)=><li key={d.formato+':'+(d.canal||i)}>{d.formato} · {d.canal==='dooh'?'Painel, sem som':d.canal==='social'?`Redes sociais, ${d.som?'com som':'sem som'}`:d.som?'Com som':'Sem som'}</li>)}</ul></div>}
function AjustesCriacao({slug,video,podeMexer,geracaoActiva,onActualizado}){
 const [instrucoes,setInstrucoes]=React.useState(''),[formato,setFormato]=React.useState('todos'),[confirmado,setConfirmado]=React.useState(false),[ocupado,setOcupado]=React.useState(false),[erro,setErro]=React.useState('');
 const p=video.pedidoResumo,preparado=video.estado==='preparado',naFila=video.estado==='fila';if(!p||!['preparado','fila','video_por_rever','aprovado'].includes(video.estado))return null;
 const button='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';
 const input='w-full border border-border bg-background px-3 py-2 text-sm outline-none focus-visible:ring-1 focus-visible:ring-primary disabled:opacity-50';
 const pedir=async(rota,body)=>{if(ocupado)return;setOcupado(true);setErro('');try{const r=await fetch(`/api/${slug}/criar/video/${video.id}/${rota}`,{method:'POST',headers:{'Content-Type':'application/json','X-Requested-With':'NetScreenCriar'},body:JSON.stringify(body)});const j=await r.json();if(!r.ok)throw Error(j.error);onActualizado(j)}catch(e){setErro(e.message)}finally{setOcupado(false)}};
 if(naFila)return <div className="space-y-3"><p className="text-sm text-muted-foreground max-w-prose">Enquanto a geração não começou, podes retirar o pedido da fila. Fica guardado para rever e confirmar mais tarde.</p><button className={button} disabled={ocupado||!podeMexer} onClick={()=>pedir('retirar',{})}>{ocupado?'A retirar…':'Retirar da fila'}</button>{erro&&<p role="alert" className="text-sm">{erro}</p>}</div>;
 // Com o vídeo pronto, o ajuste fica fechado: aberto competia com «Aprovar» (advogado da simplicidade, 3 Nov).
 const Raiz=preparado?'div':'details';
 // «Ver a versão anterior» fica fora do bloco fechado: dentro dele ninguém a via (revisor, 3 Nov).
 return <>{!preparado&&p.ajuste&&<p className="border-t border-border pt-6"><a className="underline underline-offset-4 text-sm" href={`/${slug}/criar?video=${encodeURIComponent(p.ajuste.origemId)}`}>Ver a versão anterior</a></p>}<Raiz className="space-y-4 border-t border-border pt-6">
  {preparado?<h3 className="text-xl">{p.ajuste?'Rever a nova versão':'Rever o pedido'}</h3>:<summary className="cursor-pointer text-sm underline underline-offset-4">Pedir um ajuste</summary>}
  {preparado&&p.ajuste&&<a className="underline underline-offset-4 text-sm" href={`/${slug}/criar?video=${encodeURIComponent(p.ajuste.origemId)}`}>Ver a versão anterior</a>}
  {preparado?<>
   {p.ajuste&&<p className="text-sm whitespace-pre-wrap max-w-prose">{p.ajuste.instrucoes}</p>}
   <div className="space-y-2 text-sm"><p>Formatos: {p.formatos.map(f=>f+(p.usos?.[f]?` (${p.usos[f].map(c=>c==='dooh'?'painel sem som':'redes sociais').join(' e ')})`:'')).join(', ')}.</p><p>Textos aprovados:</p><ul className="list-disc pl-5 space-y-1">{p.textos.map((t,i)=><li key={i}>{t}</li>)}</ul><p>Cartão final: {p.cta}.</p><p>Imagens: {p.imagens.length?p.imagens.join(', '):'Sem fotografias.'}</p></div>
   {video.retiradoDaFila&&<p role="status" className="text-sm">Pedido retirado da fila antes de a geração começar. Revê e confirma novamente quando quiseres gerar.</p>}
   <p className="text-sm text-muted-foreground max-w-prose">{p.ajuste?'A versão anterior fica guardada. ':''}Este pedido tem um limite de {Number(p.limites.eur).toLocaleString('pt-PT',{minimumFractionDigits:2,maximumFractionDigits:2})} €. Preparar não gasta nada; só criar o vídeo é pago.</p>
   <label className="flex items-start gap-3 text-sm"><input type="checkbox" checked={confirmado} disabled={ocupado||!podeMexer} onChange={e=>setConfirmado(e.target.checked)}/>Confirmo as instruções, os formatos, o texto, os materiais e o limite desta nova geração.</label>
   <button className={button+' bg-primary text-primary-foreground hover:bg-primary/90'} disabled={!confirmado||ocupado||!podeMexer||!geracaoActiva} onClick={()=>pedir('gerar',{confirmar:true})}>{ocupado?'A colocar na fila…':p.ajuste?'Confirmar e gerar nova versão':'Confirmar e gerar vídeo'}</button>
  </>:<>
   <p className="text-sm text-muted-foreground">Diz o que mudar na composição, no ritmo ou na animação. O texto e os materiais mantêm-se.</p>
   <label className="block text-sm" htmlFor={'ajuste-formatos-'+video.id}>Formatos a ajustar</label>
   <select id={'ajuste-formatos-'+video.id} className={input} value={formato} disabled={ocupado||!podeMexer} onChange={e=>setFormato(e.target.value)}><option value="todos">Todos os formatos desta versão</option>{p.formatos.map(f=><option key={f} value={f}>{f}</option>)}</select>
   <label className="block text-sm" htmlFor={'ajuste-instrucoes-'+video.id}>O que mudar</label>
   <textarea id={'ajuste-instrucoes-'+video.id} className={input} rows={4} maxLength={2000} value={instrucoes} disabled={ocupado||!podeMexer} placeholder="Ex.: mantém o enquadramento e o texto. Faz a fotografia aparecer mais cedo e abranda o final." onChange={e=>setInstrucoes(e.target.value)}/>
   <button className={button} disabled={ocupado||!podeMexer||instrucoes.trim().length<12} onClick={()=>pedir('ajuste',{instrucoes,formatos:formato==='todos'?p.formatos:[formato]})}>{ocupado?'A preparar…':'Preparar ajuste'}</button>
  </>}
  {erro&&<p role="alert" className="text-sm">{erro}</p>}
 </Raiz></>;
}
