/**
 * TrendApp — bootstrap (V1: sem painel de tweaks)
 *
 * O TweaksProvider/TweaksPanel do protótipo do designer foi removido do
 * bundle de produção — ele era só ferramenta de review de cenários e não
 * é UI do produto. Aqui usamos valores fixos (cenário 'normal' + tema
 * light) diretamente. Toda a interface fica idêntica ao protótipo, sem
 * o botão de simulação flutuante no canto.
 *
 * Estrutura:
 *   <RouterProvider>
 *     <AppShell>
 *       <Viewport>
 *         <RoutedScreen />
 *         <BottomNav /> (só nas 4 abas principais)
 *       </Viewport>
 *     </AppShell>
 *   </RouterProvider>
 */

// (hooks em logo.jsx)

// Rotas que mostram bottom nav (§5 do prompt Fase 2 — apenas 4 abas + subrotas):
// Bottom nav aparece somente nas rotas de aba principal — sub-rotas navegam com back button
const TABS_WITH_NAV = new Set(['inicio', 'vendas', 'clientes', 'perfil']);
// Rotas que não devem ter viewport padrão (welcome/login têm próprio layout)
const NO_NAV_ROUTES = new Set(['welcome', 'login', 'recuperar-senha']);

// Cenário padrão de produção (equivalente ao antigo tweaks.cenario === 'normal').
// window.useTweaks é instalado como shim clássico no <head> da página.
const DEFAULT_CENARIO = 'normal';

function App() {
  return (
    <RouterProvider>
      <AppShell />
    </RouterProvider>
  );
}

function AppShell() {
  const { route } = useRouter();

  // Payload fixo do cenário 'normal' — mesma configuração default do protótipo
  const payload = useMemo(() => {
    return window.TrendMocks.buildPayload(DEFAULT_CENARIO);
  }, []);

  useLucide([route]);

  const showBottomNav = TABS_WITH_NAV.has(route.name) || subRouteBelongsToTab(route.name);

  return (
    <div className="viewport" data-route={route.name}>
      <RoutedScreen route={route} payload={payload} />
      {showBottomNav && <BottomNav />}
    </div>
  );
}

function subRouteBelongsToTab(name) {
  return ['extrato', 'lancamento', 'pedidos', 'pedido', 'cliente', 'recuperar', 'recompra'].includes(name);
}

function RoutedScreen({ route, payload }) {
  const name = route.name;

  switch (name) {
    case 'welcome':          return <WelcomeScreen />;
    case 'login':            return <LoginScreen />;
    case 'recuperar-senha':  return <RecuperarSenhaScreen />;

    case 'inicio':   return <InicioScreen   payload={payload} />;
    case 'vendas':   return <VendasScreen   payload={payload} />;
    case 'clientes': return <ClientesScreen payload={payload} />;
    case 'perfil':   return <PerfilScreen   payload={payload} />;

    case 'extrato':     return <ExtratoScreen        payload={payload} />;
    case 'pedidos':     return <PedidosListScreen    payload={payload} />;
    case 'pedido':      return <PedidoDetalheScreen  payload={payload} />;
    case 'cliente':     return <ClienteDetalheScreen payload={payload} />;
    case 'recuperar':   return <RecuperarScreen      payload={payload} />;
    case 'recompra':    return <RecompraScreen       payload={payload} />;

    default:
      return (
        <div className="page">
          <PageHeader title="Rota não encontrada" />
          <div className="page-body no-nav">
            <div className="stack">
              <EmptyState icon="map-pin-off" title={`Rota "${name}" não existe`} description="Verifique a URL ou volte ao início." />
              <button className="btn primary block" onClick={() => location.hash = '#/inicio'}>Ir para o Início</button>
            </div>
          </div>
        </div>
      );
  }
}

// ─── Mount ─────────────────────────────────────────────────────────────────
function mountApp() {
  const container = document.getElementById('root');
  if (!container || container.__mounted) return;
  container.__mounted = true;
  const root = ReactDOM.createRoot(container);
  root.render(<App />);
}

// Babel Standalone processes text/babel scripts AFTER DOMContentLoaded.
// By the time this file runs, TrendFmt/TrendMocks (classical scripts) are already
// on window. So we can mount immediately.
if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', mountApp);
} else {
  mountApp();
}
