// JammSanté Clinique — app
function ClinicApp() {
  const [screen, setScreen] = useState('dash');
  const [role, setRole] = useState('gerant');
  const [theme, setTheme] = useState(() => localStorage.getItem('js-clinic-theme') || 'light');
  useEffect(() => { document.documentElement.setAttribute('data-theme', theme); localStorage.setItem('js-clinic-theme', theme); }, [theme]);
  useEffect(() => { const locked = NAV.flatMap(g => g.items).find(i => i.id === screen && i.lock && i.lock.includes(role)); if (locked) setScreen('dash'); }, [role]);
  const meta = {
    dash:{t:'Vue d\u2019ensemble', s:'Lundi 13 juillet 2026 · 47 patients attendus'},
    accueil:{t:'Accueil & file d\u2019attente', s:'Triage infirmier · tickets par service · parcours en temps réel'},
    agenda:{t:'Agenda des praticiens', s:'4 praticiens présents aujourd\u2019hui'},
    patients:{t:'Patients de la clinique', s:'Dossier administratif partagé entre services'},
    urgences:{t:'Urgences & ambulance', s:'3 prises en charge · ambulance disponible'},
    hospit:{t:'Hospitalisation', s:'8 lits · facturation journalière automatique'},
    bloc:{t:'Bloc & maternité', s:'3 actes programmés · 2 naissances en 24 h'},
    exams:{t:'Laboratoire & imagerie', s:'Demandes, délais et notification des résultats'},
    caisse:{t:'Caisse & facturation', s:'3 caisses · consolidation en temps réel'},
    pharma:{t:'Pharmacie & stock', s:'Point de vente + stock interne des soins'},
    assurances:{t:'Assurances & recouvrement', s:'IPM, mutuelles · tiers payant'},
    rapports:{t:'Rapports & finances', s:C_FINANCES.mois},
    personnel:{t:'Personnel & paie', s:'10 membres · gardes, congés, permissions'},
    vacataires:{t:'Vacataires & rétrocession', s:'3 vacataires · décompte de juillet en cours'},
    comms:{t:'Communication patients', s:'SMS & WhatsApp · rappels, résultats, satisfaction'},
  }[screen];
  const S = { dash:ScreenDash, accueil:ScreenAccueil, agenda:ScreenAgenda, patients:ScreenPatients, urgences:ScreenUrgences, hospit:ScreenHospit, bloc:ScreenBloc, exams:ScreenExams, caisse:ScreenCaisse, pharma:ScreenPharma, assurances:ScreenAssurances, rapports:ScreenRapports, personnel:ScreenPersonnel, vacataires:ScreenVacataires, comms:ScreenComms }[screen];
  return (
    <div style={{ display:'flex', minHeight:'100vh', background:'var(--g-bg)' }} data-screen-label={meta.t}>
      <ClinicSidebar screen={screen} setScreen={setScreen} role={role} />
      <div style={{ flex:1, minWidth:0 }}>
        <ClinicTopbar title={meta.t} sub={meta.s} role={role} setRole={setRole} theme={theme} setTheme={setTheme} />
        <S key={screen} go={setScreen} />
      </div>
    </div>
  );
}
ReactDOM.createRoot(document.getElementById('root')).render(<ClinicApp />);
