// =====================================================================
// Tasker24 — App root: router, theme/lang/icon-mode, tweaks panel
// =====================================================================
const { useState: useStateApp, useEffect: useEffectApp } = React;

const T24_TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "theme":     "light",
  "lang":      "en",
  "iconMode":  "colored",
  "loggedIn":  false,
  "accent":    "#1E63D6"
}/*EDITMODE-END*/;

function App() {
  const route = useRoute();
  const [T, setTweak] = useTweaks(T24_TWEAK_DEFAULTS);

  const [mobileOpen, setMobileOpen] = useStateApp(false);
  const [openSvc, setOpenSvc] = useStateApp(null);
  const [toast, setToast] = useStateApp(null);
  const setTheme = (v) => setTweak('theme', v);
  const setLang = (v) => setTweak('lang', v);
  const setIconMode = (v) => setTweak('iconMode', v);
  const setLoggedIn = (v) => setTweak('loggedIn', v);

  // Apply theme + lang on <html>
  useEffectApp(() => {
    document.documentElement.setAttribute('data-theme', T.theme);
    document.documentElement.setAttribute('lang', T.lang);
  }, [T.theme, T.lang]);

  // Accent override
  useEffectApp(() => {
    if (T.accent && T.accent !== '#1E63D6') {
      document.documentElement.style.setProperty('--t24-blue', T.accent);
    } else {
      document.documentElement.style.removeProperty('--t24-blue');
    }
  }, [T.accent]);

  const openService = (svc) => setOpenSvc(svc);

  // Decide page
  let pageEl = null;
  switch (route.page) {
    case 'home':
    case '':       pageEl = <HomePage lang={T.lang} go={route.go} openService={openService}/>; break;
    case 'categories': pageEl = <CategoriesPage lang={T.lang} iconMode={T.iconMode} setIconMode={setIconMode} openService={openService}/>; break;
    case 'services':   pageEl = <ServicesPage lang={T.lang} openService={openService} initialQuery={new URLSearchParams((window.location.hash.split('?')[1]||'')).get('q')||''}/>; break;
    case 'category':   pageEl = <CategoryDetailPage catId={route.param} lang={T.lang} openService={openService}/>; break;
    case 'service':    pageEl = <CategoryDetailPage catId={(window.T24.services.find(s=>s.id===route.param)||{}).catId||'household'} lang={T.lang} openService={openService}/>; break;
    case 'about':      pageEl = <AboutPage lang={T.lang}/>; break;
    case 'process':    pageEl = <ProcessPage lang={T.lang}/>; break;
    case 'registration': pageEl = <RegistrationPage lang={T.lang}/>; break;
    case 'login':      pageEl = <LoginPage lang={T.lang} onLogin={setLoggedIn}/>; break;
    case 'contact':    pageEl = <ContactPage lang={T.lang}/>; break;
    case 'faq':        pageEl = <FaqPage lang={T.lang}/>; break;
    case 'terms':      pageEl = <TermsPage lang={T.lang}/>; break;
    case 'privacy':    pageEl = <PrivacyPage lang={T.lang}/>; break;
    case 'refund':     pageEl = <RefundPage lang={T.lang}/>; break;
    case 'cookie':     pageEl = <CookiePage lang={T.lang}/>; break;
    case 'safety':     pageEl = <SafetyPage lang={T.lang}/>; break;
    case 'opinion':    pageEl = <OpinionPage lang={T.lang}/>; break;
    default:           pageEl = <HomePage lang={T.lang} go={route.go} openService={openService}/>;
  }

  return (
    <div data-screen-label={route.page||'home'} className="d-flex flex-column min-vh-100">
      <TopNav route={route} lang={T.lang} setLang={setLang} theme={T.theme} setTheme={setTheme}
              loggedIn={T.loggedIn} setLoggedIn={setLoggedIn}
              onOpenMobileMenu={()=>setMobileOpen(true)} />
      <MobileMenu open={mobileOpen} onClose={()=>setMobileOpen(false)} lang={T.lang} setLang={setLang} theme={T.theme} setTheme={setTheme}/>
      {pageEl}
      <Footer lang={T.lang}/>

      {/* Floating mobile CTA (only on small screens) */}
      <div className="t24-mobile-cta">
        <a href="#/services" className="btn btn-sm text-white"><i className="bi bi-search me-1"></i> Find service</a>
        <a href="#/registration" className="btn btn-sm text-white" style={{background:'rgba(255,255,255,.15)', backdropFilter:'blur(4px)'}}><i className="bi bi-briefcase me-1"></i> Become provider</a>
      </div>

      <ServiceDetailModal svc={openSvc} onClose={()=>setOpenSvc(null)}/>
      <CookieConsent />
      <Toast show={!!toast} text={toast||''} onClose={()=>setToast(null)}/>

      {/* Tweaks panel */}
      <TweaksPanel title="Tweaks">
        <TweakSection label="Appearance">
          <TweakRadio
            label="Theme"
            value={T.theme}
            onChange={(v)=>setTheme(v)}
            options={[{value:'light', label:'Light'}, {value:'dark', label:'Dark'}]}
          />
          <TweakRadio
            label="Language"
            value={T.lang}
            onChange={(v)=>setLang(v)}
            options={[{value:'en', label:'EN'}, {value:'bn', label:'বাং'}]}
          />
          <TweakColor
            label="Accent color"
            value={T.accent}
            onChange={(v)=>setTweak('accent', v)}
            options={['#1E63D6', '#0E7490', '#7C3AED', '#16A34A']}
          />
        </TweakSection>
        <TweakSection label="Catalog">
          <TweakRadio
            label="Icon style"
            value={T.iconMode}
            onChange={(v)=>setIconMode(v)}
            options={[{value:'colored', label:'Color'}, {value:'current', label:'Mute'}, {value:'white', label:'White'}]}
          />
        </TweakSection>
        <TweakSection label="Session">
          <TweakToggle
            label="Signed in (show Dashboard button)"
            value={T.loggedIn}
            onChange={(v)=>setLoggedIn(v)}
          />
          <TweakButton label="Open Registration flow" onClick={()=>{ window.location.hash='#/registration'; }} />
          <TweakButton label="Browse all services" secondary onClick={()=>{ window.location.hash='#/services'; }} />
        </TweakSection>
      </TweaksPanel>
    </div>
  );
}

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