/* ============================================================
   App — routing, état global, persistance
   ============================================================ */
const LS_KEY = 'verlaine_edl_v1';

const blankState = ()=>({
  screen:'home',          // home | project | step | recap | final
  lang:'fr',
  mode:null,              // avant | apres
  stepIndex:0,
  project:{ id:'', client:null },
  steps:{},               // par clé d'étape
  signature:null,
  ref:null,
});

function loadState(){
  try{
    const raw = localStorage.getItem(LS_KEY);
    if(raw){ return { ...blankState(), ...JSON.parse(raw) }; }
  }catch(e){}
  return blankState();
}
function persist(s){
  try{ localStorage.setItem(LS_KEY, JSON.stringify(s)); }
  catch(e){
    // quota dépassé (photos volumineuses) → on persiste sans les images
    try{
      const light = { ...s, steps:{}, signature:null };
      localStorage.setItem(LS_KEY, JSON.stringify(light));
    }catch(e2){}
  }
}
function makeRef(){
  const d = new Date();
  const p = n=>String(n).padStart(2,'0');
  return 'EDL-'+d.getFullYear()+p(d.getMonth()+1)+p(d.getDate())+'-'+p(d.getHours())+p(d.getMinutes());
}

function App(){
  const [s, setS] = useState(loadState);
  const [sending, setSending] = useState(null); // null | 'wait' | 'done'
  const set = patch => setS(prev=>{ const ns={...prev,...patch}; persist(ns); return ns; });
  const pdfRef = useRef(null); // dernier PDF généré (pour le partage WhatsApp)

  const flow = s.mode ? FLOW[s.mode] : [];
  const total = flow.length;

  /* navigation */
  const goHome   = ()=> set({ screen:'home', mode:null, stepIndex:0 });
  const pickMode = mode => set({ mode, screen:'project', stepIndex:0 });
  const startSteps = ()=> set({ screen:'step', stepIndex:0 });
  const setStepData = (key,data)=> set({ steps:{ ...s.steps, [key]:data } });

  const nextStep = ()=>{
    if(s.stepIndex < total-1) set({ stepIndex:s.stepIndex+1 });
    else set({ screen:'recap' });
  };
  const prevStep = ()=>{
    if(s.stepIndex>0) set({ stepIndex:s.stepIndex-1 });
    else set({ screen:'project' });
  };

  const validate = async ()=>{
    const ref = makeRef();
    setSending('wait');
    try{
      // 1) PDF récap signé (FR)
      const pdf = await window.buildRecapPDF({ ...s, ref });
      pdfRef.current = pdf;
      // 2) envoi backend : email client (contact@groupeverlaine.com) + dépôt doc projet CRM
      const cfg = window.EDL_CONFIG || {};
      if(cfg.submitEndpoint){
        const b64 = (pdf.dataUri||'').split(',')[1] || '';
        await fetch(cfg.submitEndpoint, {
          method:'POST', headers:{ 'Content-Type':'application/json' },
          body: JSON.stringify({
            k: cfg.key, id_project: s.project.id, mode: s.mode, ref,
            filename: pdf.filename, pdf_base64: b64, client: s.project.client || {}
          })
        }).then(r=>r.json()).catch(()=>null);
      }
    }catch(e){ /* on continue vers l'écran final même si l'envoi échoue (PDF dispo localement) */ }
    setSending('done');
    setTimeout(()=>{ set({ screen:'final', ref }); setSending(null); }, 1100);
  };

  const whatsapp = async ()=>{
    let pdf = pdfRef.current;
    if(!pdf){ try{ pdf = await window.buildRecapPDF({ ...s }); pdfRef.current = pdf; }catch(e){} }
    const c = s.project.client || {};
    const text = 'Bonjour '+(c.prenom||'')+', voici le récapitulatif de votre état des lieux '+
      (s.mode==='avant'?'avant travaux':'après travaux')+' — Groupe Verlaine. Réf : '+(s.ref||'')+'. (Document en français)';
    // Partage natif du PDF (ouvre WhatsApp avec le fichier en pièce jointe)
    if(pdf && pdf.file && navigator.canShare && navigator.canShare({ files:[pdf.file] })){
      try{ await navigator.share({ files:[pdf.file], title:'État des lieux', text }); return; }
      catch(e){ if(e && e.name==='AbortError') return; }
    }
    // Fallback (desktop / navigateur sans partage de fichier) : télécharge le PDF + ouvre WhatsApp texte
    if(pdf && pdf.blob){
      const u=URL.createObjectURL(pdf.blob); const a=document.createElement('a');
      a.href=u; a.download=pdf.filename||'etat-des-lieux.pdf'; document.body.appendChild(a); a.click();
      a.remove(); setTimeout(()=>URL.revokeObjectURL(u),5000);
    }
    window.open('https://wa.me/?text='+encodeURIComponent(text), '_blank');
  };

  const newReport = ()=>{ const ns=blankState(); persist(ns); setS(ns); };

  /* rendu */
  let body;
  if(s.screen==='home'){
    body = <HomeScreen lang={s.lang} setLang={l=>set({lang:l})} onPick={pickMode}/>;
  } else if(s.screen==='project'){
    body = <ProjectScreen lang={s.lang} mode={s.mode}
      project={s.project} setProject={p=>set({project:p})}
      onBack={goHome} onNext={startSteps}/>;
  } else if(s.screen==='step'){
    const key = flow[s.stepIndex];
    body = <StepScreen key={key} stepKey={key} data={s.steps[key]} onChange={d=>setStepData(key,d)}
      lang={s.lang} index={s.stepIndex} total={total}
      onBack={prevStep} onNext={nextStep}/>;
  } else if(s.screen==='recap'){
    body = <RecapScreen lang={s.lang} mode={s.mode} project={s.project} steps={s.steps}
      signature={s.signature} setSignature={sig=>set({signature:sig})}
      onBack={()=>set({screen:'step', stepIndex:total-1})} onValidate={validate}/>;
  } else if(s.screen==='final'){
    body = <FinalScreen lang={s.lang} project={s.project} ref_={s.ref}
      onWhatsapp={whatsapp} onNew={newReport}/>;
  }

  return (
    <div className="app">
      {body}
      {sending && <SendingOverlay lang={s.lang} done={sending==='done'}/>}
    </div>
  );
}

ReactDOM.createRoot(document.getElementById('root')).render(<App/>);
