// Main app — routes everything
function App() {
  const [route, setRoute] = useState("dashboard"); // dashboard | clients | client | upload | processing | scan-review | generating | protocol | retest-comparison
  const [activeClient, setActiveClient] = useState(null);
  const [pendingUpload, setPendingUpload] = useState(null);
  const [bloodIncluded, setBloodIncluded] = useState(false);
  const [hifIncluded, setHifIncluded] = useState(false);
  const [htmaFileName, setHtmaFileName] = useState("HTMA_Sundar_Nov_2025.pdf");
  const [confirmedMeta, setConfirmedMeta] = useState(null);
  const [openPanelKind, setOpenPanelKind] = useState(null);
  const [retestModal, setRetestModal] = useState(false);
  const [scenario, setScenario] = useState("yellow");
  const [hasPriorHistory, setHasPriorHistory] = useState(true);

  function go(r) { setRoute(r); }
  React.useEffect(() => {
    window.__goRoute = (r, clientId) => {
      if (clientId) setActiveClient(clientId);
      setRoute(r);
    };
  }, []);

  function openClient(idOrName) {
    const c = window.MOCK.CLIENTS.find(x => x.id === idOrName || x.name === idOrName) || window.MOCK.CLIENTS[0];
    setActiveClient(c.id);
    setRoute("client");
  }

  function newTest(clientId) {
    if (clientId) setActiveClient(clientId);
    setRoute("upload");
  }

  function startProcessing(payload) {
    setPendingUpload(payload);
    setBloodIncluded(Boolean(payload.bloodFile));
    setHifIncluded(Boolean(payload.hifFile));
    if (payload.htmaFile?.name) setHtmaFileName(payload.htmaFile.name);
    setRoute("processing");
  }

  const clientForCrumb = activeClient
    ? window.MOCK.CLIENTS.find(c => c.id === activeClient)
    : null;

  // Crumbs per route
  const crumbs = (() => {
    switch (route) {
      case "dashboard": return ["Practice", "Dashboard"];
      case "clients": return ["Practice", "Clients"];
      case "client": return ["Practice", "Clients", clientForCrumb?.name || "Client"];
      case "upload": return ["New test", clientForCrumb ? `For ${clientForCrumb.name}` : "Upload"];
      case "processing": return ["New test", "Processing"];
      case "scan-review": return ["New test", "Scan review"];
      case "generating": return ["New test", "Generating protocol"];
      case "protocol": return ["Cases", clientForCrumb?.name || "Amelia Hart", "Protocol review"];
      case "retest-comparison": return ["Cases", clientForCrumb?.name || "Amelia Hart", "Retest comparison"];
      default: return ["Practice"];
    }
  })();

  return (
    <div className="app">
      <Sidebar route={route} go={go} newTest={() => newTest(null)}/>
      <div className="main">
        <Topbar crumbs={crumbs} right={
          <>
            {route === "protocol" && (
              <>
                <button className="btn sm" onClick={() => go("retest-comparison")}><I.refresh size={12}/> Compare retest</button>
                <div className="topbar-divider"></div>
              </>
            )}
            <button className="icon-btn"><I.search size={16}/></button>
            <button className="icon-btn"><I.help size={16}/></button>
            <Avatar initial="L" color="oklch(0.62 0.14 240)" size={26}/>
          </>
        }/>
        <div className="scroll">
          {route === "dashboard" && <Dashboard go={go} openClient={openClient} newTest={() => newTest(null)}/>}
          {route === "clients" && <ClientList openClient={openClient}/>}
          {route === "client" && <ClientProfile clientId={activeClient} go={go} newTest={newTest}/>}
          {route === "upload" && <UploadScreen clientHint={clientForCrumb?.name} go={go} startProcessing={startProcessing}/>}
          {route === "processing" && <ProcessingScreen go={go} jumpToReview={() => go("scan-review")}/>}
          {route === "scan-review" && <ScanReview
            go={go}
            confirmedMeta={confirmedMeta}
            setConfirmedMeta={setConfirmedMeta}
            openRetestSuggestion={() => setRetestModal(true)}
            hasPriorHistory={hasPriorHistory}
            setHasPriorHistory={setHasPriorHistory}
            bloodIncluded={bloodIncluded}
            hifIncluded={hifIncluded}
            htmaFileName={htmaFileName}
          />}
          {route === "generating" && <GeneratingProtocol onDone={() => go("protocol")}/>}
          {route === "protocol" && <ProtocolReview
            go={(r) => { if (r === "client") { setActiveClient(activeClient || "c1"); go("client"); } else go(r); }}
            openPanel={setOpenPanelKind}
            scenario={scenario}
            setScenario={setScenario}
            clientName={clientForCrumb?.name}
          />}
          {route === "retest-comparison" && <RetestComparison go={go} clientName={clientForCrumb?.name}/>}
        </div>
      </div>

      {openPanelKind && <SidePanel kind={openPanelKind} onClose={() => setOpenPanelKind(null)} openPanel={setOpenPanelKind}/>}
      {retestModal && <RetestModal
        clientName={confirmedMeta?.client}
        onClose={() => setRetestModal(false)}
        onSkip={() => setRetestModal(false)}
        onLink={() => { setRetestModal(false); go("retest-comparison"); }}
      />}
    </div>
  );
}

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