import React, { useState, useMemo } from 'react'; import Navbar from './components/Navbar'; import Hero from './components/Hero'; import ContentRow from './components/ContentRow'; import VideoPlayer from './components/VideoPlayer'; import NewsBanner from './components/NewsBanner'; import { MOCK_VIDEOS, CATEGORIES_BASE } from './constants'; import { Content } from './types'; import { getSmartRecommendation } from './services/gemini'; import { Sparkles, ArrowLeft, Play } from 'lucide-react'; type View = 'home' | 'filmes' | 'series' | 'minha-lista' | 'agora-na-tv'; const App: React.FC = () => { // Alterado para MOCK_VIDEOS[1] que é o CanalTVRio (Live) para iniciar no banner const [heroContent, setHeroContent] = useState(MOCK_VIDEOS[1]); const [fullscreenVideo, setFullscreenVideo] = useState(null); const [currentView, setCurrentView] = useState('home'); const [favorites, setFavorites] = useState([]); const [recommendation, setRecommendation] = useState(''); const [isLoadingRec, setIsLoadingRec] = useState(false); const [isAiPanelOpen, setIsAiPanelOpen] = useState(false); const handleAiRecommendation = async (mood: string) => { setIsLoadingRec(true); const rec = await getSmartRecommendation(mood); setRecommendation(rec); setIsLoadingRec(false); setIsAiPanelOpen(true); }; const handleVideoSelectFromRow = (video: Content) => { setHeroContent(video); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const toggleFavorite = (content: Content) => { setFavorites(prev => prev.includes(content.id) ? prev.filter(id => id !== content.id) : [...prev, content.id] ); }; const isFavorite = (id: string) => favorites.includes(id); const favoriteItems = useMemo(() => MOCK_VIDEOS.filter(v => favorites.includes(v.id)), [favorites] ); const categories = useMemo(() => { return CATEGORIES_BASE.map(cat => { if (cat.title === 'Minha Lista') { return { ...cat, items: favoriteItems }; } return cat; }); }, [favoriteItems]); const filteredContent = useMemo(() => { if (currentView === 'home') return null; if (currentView === 'minha-lista') return favoriteItems; const categoryKey = currentView === 'filmes' ? 'filme' : 'serie'; return MOCK_VIDEOS.filter(v => v.category === categoryKey); }, [currentView, favoriteItems]); const navigateTo = (view: View) => { if (view === 'agora-na-tv') { const liveStream = MOCK_VIDEOS.find(v => v.isLive); if (liveStream) setFullscreenVideo(liveStream); setCurrentView('home'); return; } setCurrentView(view); window.scrollTo({ top: 0, behavior: 'smooth' }); }; return (
{currentView === 'home' ? ( <>
{categories.map((cat) => ( (cat.title !== 'Minha Lista' || cat.items.length > 0) && ( ) ))}
{/* News Banner Section */} ) : (

{currentView === 'filmes' && 'Filmes'} {currentView === 'series' && 'Séries'} {currentView === 'minha-lista' && 'Minha Lista'}

{filteredContent && filteredContent.length > 0 ? (
{filteredContent.map(item => (
{ setHeroContent(item); setCurrentView('home'); window.scrollTo({ top: 0, behavior: 'smooth' }); }} className="group cursor-pointer transition-all duration-300 hover:scale-105" >
{item.title}

{item.title}

{item.genre.join(', ')} • {item.year}

))}
) : (

Nenhum conteúdo encontrado nesta categoria.

)}
)} {/* AI Smart Recommendation Trigger */}
{isAiPanelOpen && (

Como você está hoje?

{['Animado', 'Relaxado', 'Curioso', 'Praia'].map(mood => ( ))}
{isLoadingRec && (
Consultando o oráculo do Rio...
)} {recommendation && !isLoadingRec && (
"{recommendation}"
)}
)}
{fullscreenVideo && ( setFullscreenVideo(null)} /> )}

© 2026 canaltvrioplay. Novo jeito de fazer televisão.

Termos de Uso Privacidade Ajuda
); }; export default App;