/* ═══════════════════════════════════════════════════════════
   DrewFans — App shell (router + mount)
   ═══════════════════════════════════════════════════════════ */

const AGE_COOKIE = 'df_age_ok';

function App() {
  // Age gate
  const [ageOk, setAgeOk] = useState(() => getCookie(AGE_COOKIE) === '1');

  // Routes: 'home' | 'search' | 'video' | 'actress' | 'watchlater' | 'pornstars' | 'categories'
  const [route, setRoute] = useState('home');
  const [history, setHistory] = useState([]); // simple back stack

  const [searchInput, setSearchInput] = useState('');
  const [searchQuery, setSearchQuery] = useState('');
  const [currentVideoUrl, setCurrentVideoUrl] = useState('');
  const [currentActressUrl, setCurrentActressUrl] = useState('');
  const [currentActressName, setCurrentActressName] = useState('');

  const watchLater = useWatchLater();
  const { toast, show: showToast } = useToast();

  const go = useCallback((nextRoute, opts = {}) => {
    setHistory(h => [...h, route]);
    setRoute(nextRoute);
    if (opts.scroll !== false) window.scrollTo({ top: 0, behavior: 'instant' });
  }, [route]);

  const goHome = useCallback(() => {
    setRoute('home');
    setHistory([]);
    window.scrollTo({ top: 0, behavior: 'instant' });
  }, []);

  const onNav = useCallback((id) => {
    if (id === 'home') return goHome();
    setHistory([]);
    setRoute(id);
    window.scrollTo({ top: 0, behavior: 'instant' });
  }, [goHome]);

  const onVideoClick = useCallback((video) => {
    setCurrentVideoUrl(video.url);
    go('video');
  }, [go]);

  const onModelClick = useCallback((url, name) => {
    setCurrentActressUrl(url);
    setCurrentActressName(name);
    go('actress');
  }, [go]);

  const onSubmitSearch = useCallback((override) => {
    const q = (override ?? searchInput).trim();
    if (!q) return;
    setSearchQuery(q);
    setSearchInput(q);
    go('search');
  }, [searchInput, go]);

  const onCategoryClick = useCallback((category) => {
    // Categories are search-driven for now
    setSearchInput(category.name);
    setSearchQuery(category.name);
    go('search');
  }, [go]);

  const onBack = useCallback(() => {
    setHistory(h => {
      if (h.length === 0) {
        setRoute('home');
        return [];
      }
      const prev = h[h.length - 1];
      setRoute(prev);
      window.scrollTo({ top: 0, behavior: 'instant' });
      return h.slice(0, -1);
    });
  }, []);

  // Accept age gate → set cookie
  const acceptAge = useCallback(() => {
    setCookie(AGE_COOKIE, '1', 30);
    setAgeOk(true);
  }, []);

  if (!ageOk) {
    return <AgeGate onAccept={acceptAge}/>;
  }

  return (
    <div>
      <Header
        route={route}
        onNav={onNav}
        search={searchInput}
        setSearch={setSearchInput}
        onSubmitSearch={() => onSubmitSearch()}
        watchLaterCount={watchLater.items.length}
      />

      {route === 'home' && (
        <HomePage
          onVideoClick={onVideoClick}
          onModelClick={onModelClick}
          watchLater={watchLater}
        />
      )}
      {route === 'search' && (
        <SearchPage
          query={searchQuery}
          onVideoClick={onVideoClick}
          onModelClick={onModelClick}
          watchLater={watchLater}
        />
      )}
      {route === 'video' && (
        <VideoPage
          videoUrl={currentVideoUrl}
          onVideoClick={onVideoClick}
          onModelClick={onModelClick}
          onBack={onBack}
          watchLater={watchLater}
          showToast={showToast}
        />
      )}
      {route === 'actress' && (
        <ActressPage
          actressUrl={currentActressUrl}
          actressName={currentActressName}
          onVideoClick={onVideoClick}
          onModelClick={onModelClick}
          onBack={onBack}
          watchLater={watchLater}
        />
      )}
      {route === 'watchlater' && (
        <WatchLaterPage
          onVideoClick={onVideoClick}
          onModelClick={onModelClick}
          watchLater={watchLater}
        />
      )}
      {route === 'pornstars' && (
        <PornstarsPage
          onModelClick={onModelClick}
          onSubmitSearch={onSubmitSearch}
        />
      )}
      {route === 'categories' && (
        <CategoriesPage
          onCategoryClick={onCategoryClick}
        />
      )}

      <footer className="df-footer">
        DrewFans · esperienza streaming curata. I contenuti sono forniti da provider terzi.
        <br/>
        Sito riservato a un pubblico adulto (18+).
      </footer>

      <ToastView message={toast}/>
    </div>
  );
}

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