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 */}
>
) : (
setCurrentView('home')}
className="p-2 hover:bg-white/10 rounded-full transition-colors"
>
{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.genre.join(', ')} • {item.year}
))}
) : (
Nenhum conteúdo encontrado nesta categoria.
setCurrentView('home')}
className="px-6 py-2 bg-red-600 rounded-lg font-bold hover:bg-red-700 transition-colors"
>
Voltar para o Início
)}
)}
{/* AI Smart Recommendation Trigger */}
setIsAiPanelOpen(!isAiPanelOpen)}
className="p-4 bg-gradient-to-tr from-red-600 to-red-800 rounded-full shadow-2xl shadow-red-500/50 hover:scale-110 transition-transform flex items-center gap-2 group border border-white/20"
>
Dica do Carioca AI
{isAiPanelOpen && (
Como você está hoje?
{['Animado', 'Relaxado', 'Curioso', 'Praia'].map(mood => (
handleAiRecommendation(mood)}
className="px-3 py-2 bg-white/5 hover:bg-white/10 rounded-lg text-sm transition-colors border border-white/5 text-white"
>
{mood}
))}
{isLoadingRec && (
Consultando o oráculo do Rio...
)}
{recommendation && !isLoadingRec && (
"{recommendation}"
)}
)}
{fullscreenVideo && (
setFullscreenVideo(null)}
/>
)}
);
};
export default App;
top of page
Descubra nossa grade de televisão eclética, perfeita para toda a família! Com uma seleção diversificada de programas, shows, filmes e documentários, garantimos entretenimento para todos os gostos, indo momentos de diversão e aprendizado em um só lugar. 00:00
SaladaCast - Podcast
02:00
Sessão Web
04:00
Clips
09:00
Desenhos
10:00
Show Marques
11:00
Aula de Yoga
11:30
Culinária
12:00
Plantão de Notícias
12:20
Clipes
13:00
Sesão Web
15:00
Tv Loucura
16:00
LoTV
16:30
Você em Foco
18:00
Faces da Beleza
19:00
Papo de Adorador
20:00
Pod Falar
21:00
Sessão Web
23:00
Clips
bottom of page