import React, { useState, useMemo, useEffect } from 'react'; import { Search, Calendar as CalendarIcon, ChevronRight, ArrowLeft, Info, CheckCircle2, Thermometer, Snowflake, MapPin } from 'lucide-react'; // Generic tips fallback const defaultDicas = { escolher: 'Prefira frutos com cor vibrante, sem machucados, partes moles ou furos na casca. O aroma deve ser agradável.', conservar: 'Mantenha em local fresco e arejado. Após maduro ou cortado, conserve na geladeira em recipiente fechado.', congelar: 'Sim. Lave, descasque, pique e guarde em potes ou sacos próprios para freezer por até 3 meses.', origens: 'Produção distribuída por diversas regiões do território nacional.' }; const fruitData = [ { name: 'Abacate', months: [2, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 2], escolher: 'A casca deve ceder levemente ao toque suave. Evite frutos muito moles ou com manchas escuras fundas.', conservar: 'Se estiver verde, deixe em temperatura ambiente. Quando amadurecer, guarde na geladeira para não estragar.' }, { name: 'Abacaxi', months: [1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1], escolher: 'As folhas da coroa devem soltar com facilidade ao puxar. O aroma na base deve ser doce.', conservar: 'Deixe fora da geladeira até o momento de fatiar. Depois de cortado, mantenha na geladeira em pote fechado.' }, { name: 'Açaí', months: [1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 2], ...defaultDicas }, { name: 'Ameixa', months: [1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1], escolher: 'Prefira as com casca lisa, sem rugas, e que cedam levemente à pressão.', conservar: 'Guarde na geladeira (gaveta inferior) para prolongar a vida útil. Lave apenas antes de comer.' }, { name: 'Atemóia', months: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 0, 0], escolher: 'Os "gomos" da casca devem estar ligeiramente afastados. Fruto deve ceder um pouco ao toque.', conservar: 'Amadurece rápido fora da geladeira. Consuma logo após madura ou refrigere por no máximo 2 dias.' }, { name: 'Banana', months: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], escolher: 'Para consumo imediato, escolha cascas amarelas com pintinhas marrons. Para durar mais, pontas esverdeadas.', conservar: 'Sempre fora da geladeira, em local fresco. A geladeira deixa a casca preta e altera o sabor.' }, { name: 'Caju', months: [1, 1, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1], escolher: 'Cor viva (amarelo ou vermelho), firme e sem manchas escuras ou partes machucadas.', conservar: 'É muito perecível. Guarde na geladeira e consuma em até 2 dias úteis.' }, { name: 'Caqui', months: [0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], escolher: 'A casca deve estar intacta. O tipo Rama Forte é bem mole quando maduro, o Fuyu deve ser firme como maçã.', conservar: 'Na geladeira duram bastante tempo. Retire um pouco antes de comer se preferir menos gelado.' }, { name: 'Carambola', months: [1, 1, 2, 2, 0, 0, 2, 1, 1, 0, 0, 2], escolher: 'Cor amarela brilhante para consumo imediato. Bordas ligeiramente escurecidas são normais.', conservar: 'Deixe em temperatura ambiente até amarelar por completo, depois transfira para a geladeira.' }, { name: 'Cereja', months: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], ...defaultDicas }, { name: 'Coco', months: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], escolher: 'Sacuda o coco verde para ouvir a água (quanto mais, melhor). Coco seco deve ser pesado para o tamanho.', conservar: 'O verde pode ficar fora da geladeira até abrir. Depois de aberto, consuma a água no mesmo dia.' }, { name: 'Cupuaçu', months: [1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1], ...defaultDicas }, { name: 'Figo', months: [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1], escolher: 'Frutos macios e gordinhos. Evite os que estiverem soltando líquido ou cheirando a fermentado.', conservar: 'Altamente perecível. Guarde imediatamente na geladeira forrado com papel toalha e consuma em 2 dias.' }, { name: 'Goiaba', months: [1, 1, 1, 2, 2, 0, 0, 0, 0, 2, 1, 1], escolher: 'Deve ter um aroma forte e doce, e ceder levemente à pressão dos dedos.', conservar: 'Deixe na fruteira até amadurecer. Depois, guarde na geladeira para durar mais uns dias.' }, { name: 'Graviola', months: [1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 2, 1], ...defaultDicas }, { name: 'Jabuticaba', months: [0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 0], escolher: 'Casca brilhante, lisa e cor preta intensa. Frutos murchos já estão passados.', conservar: 'Lave e guarde na geladeira em pote fechado. Consuma rápido pois fermenta facilmente.' }, { name: 'Jaca', months: [1, 1, 2, 0, 0, 0, 0, 0, 0, 2, 1, 1], ...defaultDicas }, { name: 'Kiwi', months: [0, 0, 0, 1, 1, 1, 1, 2, 0, 0, 0, 0], escolher: 'Pressione delicadamente; deve ceder um pouco. Muito duro significa verde; muito mole, passado.', conservar: 'Se estiver duro, deixe perto de maçãs ou bananas fora da geladeira. Maduro, mantenha refrigerado.' }, { name: 'Laranja', months: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], escolher: 'Casca lisa e fina, pesado para o próprio tamanho (indica mais suco). Cor não é sinal definitivo de doçura.', conservar: 'Pode ficar em local fresco por até uma semana, ou na gaveta da geladeira por até um mês.' }, { name: 'Limão', months: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], escolher: 'Semelhante à laranja: casca lisa, macia ao toque leve e frutos pesados rendem mais suco.', conservar: 'Duram bem fora da geladeira, mas na parte de baixo da geladeira podem durar semanas.' }, { name: 'Maçã', months: [2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2], escolher: 'Firme ao toque, sem partes amassadas ou escuras na casca.', conservar: 'Guarde na geladeira para manter a crocância por semanas. Fora dela, ficam "farinhentas" mais rápido.' }, { name: 'Mamão', months: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], escolher: 'Casca predominantemente amarela, macio ao toque (sem afundar o dedo).', conservar: 'Amadurece fora da geladeira enrolado em jornal. Depois de maduro ou cortado, refrigere imediatamente.' }, { name: 'Manga', months: [1, 1, 1, 2, 2, 0, 0, 0, 2, 1, 1, 1], escolher: 'Confie no aroma doce próximo ao cabinho e se cede levemente ao toque. Cor não define maturação.', conservar: 'Deixe na fruteira até amadurecer. Só guarde na geladeira se já estiver no ponto de comer.' }, { name: 'Maracujá', months: [1, 1, 1, 2, 2, 0, 0, 2, 1, 1, 1, 1], escolher: 'Casca enrugada significa que está mais doce e pronto. Escolha os mais pesados (mais polpa).', conservar: 'Pode ser conservado fora da geladeira. Para longa duração, você pode congelar a polpa.' }, { name: 'Melancia', months: [1, 1, 1, 2, 0, 0, 0, 0, 2, 1, 1, 1], escolher: 'Faça o teste do som: batendo nela, deve soar oco. Procure a mancha amarela (onde ficou no chão).', conservar: 'Inteira, mantenha em local arejado. Após cortada, cubra com plástico filme e guarde na geladeira.' }, { name: 'Melão', months: [1, 1, 2, 0, 0, 0, 0, 2, 1, 1, 1, 1], escolher: 'Pressione as extremidades; devem ceder um pouco. Aroma doce é um bom indicador.', conservar: 'Inteiro e ainda firme, fora da geladeira. Maduro e/ou cortado, sempre na geladeira.' }, { name: 'Morango', months: [0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 0], escolher: 'Vermelhos por inteiro (não amadurecem depois de colhidos), sem machucados e com folhas verdes vivas.', conservar: 'Na geladeira, em recipiente forrado com papel toalha. NÃO LAVE antes de guardar, apenas na hora de comer.' }, { name: 'Pera', months: [1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 2, 1], escolher: 'Pressione levemente perto do cabinho; se ceder, está madura.', conservar: 'Deixe amadurecer fora da geladeira. Após madura, mantenha refrigerada.' }, { name: 'Pêssego', months: [1, 2, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1], escolher: 'O fundo (perto do cabinho) deve ser amarelo-creme, não verde. Aroma floral suave.', conservar: 'Fora da geladeira até ceder ao toque, depois guarde refrigerado por até 5 dias.' }, { name: 'Pitanga', months: [1, 2, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1], ...defaultDicas }, { name: 'Tangerina', months: [0, 0, 0, 1, 1, 1, 1, 1, 2, 0, 0, 0], escolher: 'Casca brilhante, cores fortes e peso na mão indicam frescor e bastante caldo.', conservar: 'Podem ficar na fruteira por alguns dias, ou na geladeira para durarem mais.' }, { name: 'Uva', months: [1, 1, 1, 2, 0, 0, 0, 0, 0, 2, 1, 1], escolher: 'Cachos volumosos, bagos firmes presos ao cabinho (que deve estar verde e flexível, não seco).', conservar: 'Lave apenas antes de consumir. Guarde na geladeira (gaveta inferior) em saco plástico perfurado.' } ]; const monthsList = [ 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ]; const carouselImages = [ { src: 'source/image-FoXdY66Uv3PIaVmcBkfBsiUMT0c9pT_2.png', alt: 'Papaya' }, { src: 'source/image-eUUCVNutiSX3Na8qdSelnsTlKye5Ad_2.png', alt: 'Rambutan' }, { src: 'source/image-id2bjNWhceyyEfRKFC99ipUcMSqfio_2.png', alt: 'Orange' }, { src: 'source/image-t5ETcqgAlGBJHRCOgcNg9OPMX4FznF_2.png', alt: 'Watermelon' }, { src: 'source/image-8LTO6JuYdFznf0sQdNCzGaekZn9rQ4.png', alt: 'Lemon Slice' }, { src: 'source/image-Z0XqvzJFfoxD7OLa7twGAmDQYnyTtl.png', alt: 'Apricot/Peach' } ]; export default function App() { const [currentView, setCurrentView] = useState('home'); // 'home', 'monthView', 'fruitDetail' const [selectedMonth, setSelectedMonth] = useState(new Date().getMonth()); const [searchQuery, setSearchQuery] = useState(''); const [selectedFruit, setSelectedFruit] = useState(null); // State for image carousel on Home const [currentImageIndex, setCurrentImageIndex] = useState(0); useEffect(() => { if (currentView === 'home') { const interval = setInterval(() => { setCurrentImageIndex((prev) => (prev + 1) % carouselImages.length); }, 3500); // Change image every 3.5 seconds return () => clearInterval(interval); } }, [currentView]); const currentMonthName = monthsList[selectedMonth]; // Fruits for the currently selected month const highSeasonFruits = useMemo(() => fruitData.filter(f => f.months[selectedMonth] === 1).sort((a, b) => a.name.localeCompare(b.name)), [selectedMonth]); const mediumSeasonFruits = useMemo(() => fruitData.filter(f => f.months[selectedMonth] === 2).sort((a, b) => a.name.localeCompare(b.name)), [selectedMonth]); // Search results const searchResults = useMemo(() => { if (!searchQuery.trim()) return []; const query = searchQuery.toLowerCase(); return fruitData.filter(f => f.name.toLowerCase().includes(query)).sort((a, b) => a.name.localeCompare(b.name)); }, [searchQuery]); const handleMonthSelect = (monthIndex) => { setSelectedMonth(monthIndex); setCurrentView('monthView'); setSearchQuery(''); }; const handleFruitSelect = (fruit) => { setSelectedFruit(fruit); setCurrentView('fruitDetail'); }; const goHome = () => { setCurrentView('home'); setSearchQuery(''); }; const goBack = () => { if (currentView === 'fruitDetail') { setCurrentView(searchQuery ? 'home' : 'monthView'); } else { goHome(); } }; const Header = () => (
{currentView !== 'home' && ( )}
{/* Replaced Apple with Lemon Tree Image */}
Lemon Tree Logo

Safra

); const renderHome = () => (
{/* Animated Carousel & Title Row */}

O que está
na época?

Descubra as melhores frutas para consumir hoje.

{/* The 3D Image Carousel */}
{carouselImages.map((img, index) => ( {img.alt} ))}
{/* Search Input */}
setSearchQuery(e.target.value)} />
{/* Search Results */} {searchQuery && (

Resultados da busca

{searchResults.length > 0 ? (
{searchResults.map(fruit => ( ))}
) : (
Nenhuma fruta encontrada.
)}
)} {/* Quick Month Selector */} {!searchQuery && (

Navegar por Mês

{monthsList.map((month, index) => ( ))}
)} {/* Current Month Highlight (if not searching) */} {!searchQuery && (

Destaque de {monthsList[new Date().getMonth()]}

Veja as frutas que estão com a melhor qualidade e preço neste momento.

)}
); const renderMonthView = () => (

{currentMonthName}

Guia de safra para este mês.

{/* High Season */}

Alta Safra

Melhor época para consumo. Maior oferta, qualidade e melhores preços.

{highSeasonFruits.map(fruit => ( ))} {highSeasonFruits.length === 0 && (
Sem dados de alta safra.
)}
{/* Medium Season */}

Média Safra

Boa oferta, mas pode não estar no pico de qualidade ou menor preço.

{mediumSeasonFruits.map(fruit => ( ))} {mediumSeasonFruits.length === 0 && (
Sem dados de média safra.
)}
); const renderFruitDetail = () => { if (!selectedFruit) return null; // Use specific tips or fallback to default const escolherText = selectedFruit.escolher || defaultDicas.escolher; const conservarText = selectedFruit.conservar || defaultDicas.conservar; const congelarText = selectedFruit.congelar || defaultDicas.congelar; const origensText = selectedFruit.origens || defaultDicas.origens; return (
{/* Fallback to first letter */} {selectedFruit.name.charAt(0)}

{selectedFruit.name}

{/* Dicas Section - Compact Horizontal Cards */}

Como escolher

{escolherText}

Conservação doméstica

{conservarText}

Pode congelar?

{congelarText}

Principais origens no Brasil

{origensText}

{/* Compact Calendar Section - 6x2 Grid */}

Safra Anual

{monthsList.map((month, index) => { const status = selectedFruit.months[index]; let statusColor = 'bg-gray-50 border border-gray-200 text-gray-400'; if (status === 1) { statusColor = 'bg-gray-900 border-transparent text-white shadow-sm'; } else if (status === 2) { statusColor = 'bg-gray-300 border-transparent text-gray-800'; } return (
{month.substring(0, 3)}
); })}
{/* Ultra-compact Legend */}
Alta
Média
Baixa
{/* General Disclaimer */}

A sazonalidade pode variar dependendo da região do Brasil e fatores climáticos anuais.

); }; return (
{currentView === 'home' && renderHome()} {currentView === 'monthView' && renderMonthView()} {currentView === 'fruitDetail' && renderFruitDetail()}
); }