import { useState } from 'react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Navigation } from 'swiper/modules';
import {
Calendar, Clock, MapPin, Link2, GraduationCap, ExternalLink,
ChevronLeft, ChevronRight,
} from 'lucide-react';
import 'swiper/css';
import 'swiper/css/navigation';
import { Lightbox, KakaoMap } from '@/components/common';
import { decodeHtmlEntities, formatFullDate, formatTime } from './utils';
/**
* 행사 일정 섹션 컴포넌트 (학교 행사 등)
*/
function EventSection({ schedule }) {
const members = schedule.members || [];
const isFullGroup = members.length === 5;
const posters = schedule.posters || [];
const postUrls = schedule.postUrls || [];
const venue = schedule.venue || null;
const categoryColor = schedule.category?.color || '#facc15';
const kakaoMapUrl = venue && venue.lat && venue.lng
? `https://map.kakao.com/link/map/${encodeURIComponent(venue.name)},${venue.lat},${venue.lng}`
: null;
const [lightbox, setLightbox] = useState({ open: false, index: 0 });
const lightboxImages = posters.map((p) => p.originalUrl || p.mediumUrl);
const openLightbox = (index) => setLightbox({ open: true, index });
return (
{/* 왼쪽: 포스터 슬라이드 */}
{posters.length > 0 ? (
1 ? {
prevEl: '.event-poster-prev',
nextEl: '.event-poster-next',
} : false}
spaceBetween={0}
slidesPerView={1}
loop={posters.length > 1}
className="w-full"
>
{posters.map((p, idx) => (
))}
{posters.length > 1 && (
<>
{posters.length}장
>
)}
) : (
)}
{/* 오른쪽: 정보 */}
{/* 학교 + 날짜 */}
{schedule.schoolName && (
{schedule.schoolName}
)}
{formatFullDate(schedule.date)}
{schedule.time && (
{formatTime(schedule.time)}
)}
{/* 제목 */}
{decodeHtmlEntities(schedule.title)}
{/* 멤버 */}
{members.length > 0 && (
{isFullGroup ? (
프로미스나인
) : (
members.map((member) => (
{member.name}
))
)}
)}
{/* 장소 */}
{venue && (
{venue.name}
{venue.address && (
{venue.address}
)}
{kakaoMapUrl && (
카카오맵에서 보기
)}
{venue.lat && venue.lng && (
)}
)}
{/* URL 목록 */}
{postUrls.length > 0 && (
관련 링크
{postUrls.map((url, idx) => (
-
·
{url}
))}
)}
{/* Lightbox */}
{posters.length > 0 && (
setLightbox((prev) => ({ ...prev, open: false }))}
onIndexChange={(index) => setLightbox((prev) => ({ ...prev, index }))}
showCounter={posters.length > 1}
showDownload
/>
)}
);
}
export default EventSection;