/* ============ Sales Console — App shell + routing ============ */

const TWEAK_DEFAULTS = {
  "accent": "#191c1f",
  "radius": 22
};

function App(){
  const [t,setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [authed,setAuthed] = useState(()=>localStorage.getItem('sw_sales_auth')==='1');
  const [view,setView] = useState(()=>{
    const v = localStorage.getItem('sw_sales_view');
    const valid = ['dashboard','inbox','deals','quotes','kp','contractors','tenders','leads','assistant','agents','audit','analytics','settings'];
    return valid.includes(v) ? v : 'dashboard';
  });
  const [search,setSearch] = useState('');
  const [drawerTraceId,setDrawerTraceId] = useState(null);
  const [selectedDealId,setSelectedDealId] = useState(null);
  const [selectedKpId,setSelectedKpId] = useState(null);
  const [toast,setToast] = useState(null);

  useEffect(()=>{
    localStorage.setItem('sw_sales_view', view);
    setSearch('');
    setSelectedDealId(null);
  },[view]);

  const notify = (m) => setToast(m);
  const openTrace = (id) => setDrawerTraceId(id);
  const openDeal = (id) => { setView('deals'); setTimeout(()=>setSelectedDealId(id), 100); };

  if (!authed) {
    return <Login onLogin={()=>{localStorage.setItem('sw_sales_auth','1'); setAuthed(true);}}/>;
  }

  const titles = {
    dashboard: 'Дашборд',
    inbox: 'Входящие',
    deals: 'Сделки',
    quotes: 'Котировки',
    kp: 'Коммерческие предложения',
    contractors: 'Контрагенты',
    tenders: 'Тендеры',
    leads: 'Лиды',
    assistant: 'ИИ-ассистент',
    agents: 'Агенты',
    audit: 'Аудит действий',
    analytics: 'Аналитика',
    settings: 'Настройки',
  };

  const inboxNew = SW_SALES.inbox.filter(m=>m.agentStatus==='processing').length;
  const dealsEsc = SW_SALES.deals.filter(d=>d.escalated).length;
  const escTotal = SW_SALES.traces.filter(tr=>tr.state==='escalated').length;
  const tendersNew = SW_SALES.tenders.filter(tr=>tr.draftReady).length;

  const badges = {
    inbox: inboxNew || null,
    deals: dealsEsc || null,
    agents: escTotal || null,
    tenders: tendersNew || null,
  };

  const rootStyle = {'--accent': t.accent, '--r-lg': t.radius+'px', '--r-md': Math.max(10, t.radius-6)+'px'};

  return (
    <div className="app" style={rootStyle}>
      <Sidebar view={view} setView={setView} badges={badges}/>
      <div className="main">
        <TopBar title={titles[view]} search={search} setSearch={setSearch}/>

        {view==='dashboard'   && <Dashboard setView={setView} openTrace={openTrace} notify={notify}/>}
        {view==='inbox'       && <Inbox openTrace={openTrace} openDeal={openDeal} setView={setView} notify={notify}/>}
        {view==='deals'       && <Deals openTrace={openTrace} openDeal={(id)=>setSelectedDealId(id)} selectedDealId={selectedDealId} setSelectedDealId={setSelectedDealId} setView={setView} notify={notify} search={search}/>}
        {view==='quotes'      && <Quotes openTrace={openTrace} search={search}/>}
        {view==='kp'          && <Kp openTrace={openTrace} setView={setView} notify={notify} selectedKpId={selectedKpId} setSelectedKpId={setSelectedKpId}/>}
        {view==='contractors' && <Contractors search={search} openTrace={openTrace}/>}
        {view==='tenders'     && <Tenders openTrace={openTrace} notify={notify} search={search}/>}
        {view==='leads'       && <Leads openTrace={openTrace} notify={notify} search={search}/>}
        {view==='assistant'   && <AiChat notify={notify}/>}
        {view==='agents'      && <Agents openTrace={openTrace} notify={notify}/>}
        {view==='audit'       && <Audit openTrace={openTrace} search={search}/>}
        {view==='analytics'   && <Analytics/>}
        {view==='settings'    && <Settings/>}
      </div>

      {drawerTraceId && <ReasoningDrawer traceId={drawerTraceId} onClose={()=>setDrawerTraceId(null)} notify={notify}/>}
      {toast && <Toast msg={toast} onDone={()=>setToast(null)}/>}

      <TweaksPanel>
        <TweakSection label="Акцент"/>
        <TweakColor label="Цвет действий" value={t.accent} options={['#191c1f','#494fdf','#00a87e','#e23b4a']} onChange={v=>setTweak('accent',v)}/>
        <TweakSection label="Форма"/>
        <TweakSlider label="Скругление карточек" value={t.radius} min={12} max={28} unit="px" onChange={v=>setTweak('radius',v)}/>
        <TweakSection label="Сессия"/>
        <TweakButton label="Выйти из кабинета" onClick={()=>{localStorage.removeItem('sw_sales_auth'); setAuthed(false);}}/>
      </TweaksPanel>
    </div>
  );
}

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