'use client'; import { useState } from 'react'; import Link from 'next/link'; import { Calendar, ChevronLeft, ChevronRight } from 'lucide-react'; import { mushrooms } from '@/data/mushrooms'; import { EdibilityBadge } from '@/components/EdibilityBadge'; import { cn, getCurrentMonth, getMushroomsByMonth, getMushroomAbundance } from '@/lib/utils'; import { MONTH_NAMES, type Month } from '@/lib/types'; import type { Metadata } from 'next'; const abundanceLabel: Record = { rare: 'Редко', moderate: 'Умеренно', abundant: 'Обильно', }; const abundanceDot: Record = { rare: 'bg-amber-300', moderate: 'bg-forest-400', abundant: 'bg-forest-600', }; const monthDescriptions: Record = { 1: 'Январь — самый тихий месяц для грибника. В тёплые зимы можно найти вёшенки на стволах деревьев.', 2: 'Февраль похож на январь. Вёшенки продолжают плодоносить в буковых лесах горного Крыма.', 3: 'Весна начинается. Появляются первые вёшенки. В лесу пока ещё прохладно для массового роста грибов.', 4: 'Апрель — месяц первых весенних грибов. Вёшенки обильны, могут появиться первые сморчки.', 5: 'Май — начало грибного сезона. Появляются первые маслята и шампиньоны после весенних дождей.', 6: 'Июнь — разнообразие нарастает. Лисички, маслята, белые грибы начинают появляться в горных лесах.', 7: 'Июль — жаркий месяц. Грибы появляются после дождей. В горных лесах можно найти белые, лисички, рыжики.', 8: 'Август — активный месяц. Дождевики, маслята, моховики обильны. Начинают появляться осенние виды.', 9: 'Сентябрь — разгар сезона! Максимальное разнообразие видов. Белые грибы, лисички, опята, рыжики.', 10: 'Октябрь — пик грибного сезона в Крыму! Мышата, опята, маслята, белые — всё в изобилии.', 11: 'Ноябрь — продолжение осеннего сезона. Мышата, опята, вёшенки в большом количестве.', 12: 'Декабрь — завершение сезона. Мышата, опята, вёшенки — последний шанс набрать корзинку.', }; export default function CalendarPage() { const currentMonth = getCurrentMonth(); const [selectedMonth, setSelectedMonth] = useState(currentMonth); const monthMushrooms = getMushroomsByMonth(mushrooms, selectedMonth); const prevMonth = () => { setSelectedMonth((m) => (m === 1 ? 12 : m - 1) as Month); }; const nextMonth = () => { setSelectedMonth((m) => (m === 12 ? 1 : m + 1) as Month); }; return (
{/* Header */}

Календарь грибника

Узнайте, какие грибы растут в каждом месяце в Крыму

{/* Month Selector - Grid */}
{Array.from({ length: 12 }, (_, i) => { const month = (i + 1) as Month; const count = getMushroomsByMonth(mushrooms, month).length; const isCurrent = month === currentMonth; const isSelected = month === selectedMonth; return ( ); })}
{/* Selected Month Content */}
{/* Month Header */}

{MONTH_NAMES[selectedMonth]}

{monthMushrooms.length} {monthMushrooms.length === 1 ? 'вид' : monthMushrooms.length < 5 ? 'вида' : 'видов'} грибов

{/* Month Description */}

{monthDescriptions[selectedMonth]}

{/* Mushroom List */}
{monthMushrooms.length > 0 ? ( monthMushrooms .sort((a, b) => { const aAbundance = getMushroomAbundance(a, selectedMonth); const bAbundance = getMushroomAbundance(b, selectedMonth); const order = { abundant: 0, moderate: 1, rare: 2, none: 3 }; return order[aAbundance] - order[bAbundance]; }) .map((mushroom) => { const abundance = getMushroomAbundance(mushroom, selectedMonth); return ( {/* Image */}
{mushroom.name}
{/* Info */}

{mushroom.name}

{mushroom.scientificName}

{/* Abundance */}
{abundanceLabel[abundance]}
); }) ) : (

В этом месяце грибной сезон не активен

Основной сезон в Крыму — с мая по декабрь

)}
{/* Legend */}
Обилие: Редко Умеренно Обильно Текущий месяц
); }