// App.jsx - Root: gestisce auth e routing
const PAGE_STORAGE_KEY = 'libri-associazione-current-page';
const DEFAULT_PAGE = {
  admin: 'dashboard',
  assistente: 'assistente',
  genitore: 'portale',
};
const PAGES_BY_ROLE = {
  admin: ['dashboard','riunioni','alunni','classi','libri','prestiti','utenti','conferme','report','configurazione','assistente','portale'],
  assistente: ['assistente','inventario','liste_classe','portale'],
  genitore: ['portale'],
};

function getStoredPage() {
  try {
    const page = localStorage.getItem(PAGE_STORAGE_KEY);
    return page || null;
  } catch {
    return null;
  }
}

function resolvePageForRole(ruolo) {
  const saved = getStoredPage();
  if (saved && PAGES_BY_ROLE[ruolo]?.includes(saved)) return saved;
  return DEFAULT_PAGE[ruolo] || 'dashboard';
}

function App() {
  const [user, setUser] = React.useState(undefined); // undefined=loading
  const [page, setPageState] = React.useState(() => getStoredPage());

  const setPage = React.useCallback((nextPage) => {
    setPageState(nextPage);
    try {
      localStorage.setItem(PAGE_STORAGE_KEY, nextPage);
    } catch { /* ignore localStorage error */ }
  }, []);

  React.useEffect(() => {
    const handleDbChange = () => {
      toast('Dati aggiornati da un altro dispositivo. Ricarico la pagina...');
      window.location.reload();
    };
    window.addEventListener('db-change', handleDbChange);
    return () => window.removeEventListener('db-change', handleDbChange);
  }, []);

  // Controlla sessione al mount
  React.useEffect(() => {
    api('/api/me').then(u => {
      if (!u || u.errore) { setUser(null); return; }
      setUser(u);
      setPage(resolvePageForRole(u.ruolo));
    });
  }, []);

  if (user === undefined) return (
    <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100vh', background: 'var(--ink)' }}>
      <div style={{ color: '#fff', fontSize: '1.5rem' }}>📚</div>
    </div>
  );

  if (!user) return <Login onLogin={u => { setUser(u); setPage(resolvePageForRole(u.ruolo)); }} />;

  const pages = {
    dashboard: <Dashboard />,
    riunioni: <Riunioni />,
    alunni: <Alunni />,
    classi: <Classi />,
    libri: <Libri />,
    prestiti: <Prestiti />,
    utenti: <Utenti />,
    conferme: <Conferme />,
    report: <Report />,
    configurazione: <Configurazione />,
    assistente: <Assistente />,
    inventario: <Inventario />,
    liste_classe: <ListeClasse />,
    portale: <Portale />,
  };

  return (
    <Layout user={user} page={page} setPage={setPage}>
      {pages[page] || <div style={{ color: 'var(--ink2)' }}>Pagina non trovata</div>}
    </Layout>
  );
}

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