import { useState } from 'react'; import { FiX, FiCheckCircle, FiPlay, FiClock, FiBook, FiStar, FiGlobe, FiAward, FiShield, FiChevronDown, FiChevronUp, FiShoppingCart, FiLock } from 'react-icons/fi'; import type { Course } from '../../types/course'; interface CourseModalProps { course: Course | null; isOpen: boolean; isInCart: boolean; isTeacherPreview?: boolean; onClose: () => void; onAddToCart: (course: Course) => void; onBuyNow: (course: Course) => void; } export const CourseModal: React.FC = ({ course, isOpen, isInCart, isTeacherPreview = false, onClose, onAddToCart, onBuyNow, }) => { const [expandedModules, setExpandedModules] = useState>({ m1: true, m2: true, m3: true }); const [activeTab, setActiveTab] = useState<'curriculum' | 'instructor' | 'reviews'>('curriculum'); const [isPlayingVideo, setIsPlayingVideo] = useState(false); if (!isOpen || !course) return null; const toggleModule = (modId: string) => { setExpandedModules((prev) => ({ ...prev, [modId]: !prev[modId] })); }; const discountPercent = Math.round( ((course.originalPrice - course.price) / course.originalPrice) * 100 ); return (
{/* Modal Container with full Light / Dark Mode support */}
e.stopPropagation()} > {/* Top Header Bar */}
{course.category} • Nivel: {course.level} {isTeacherPreview && ( Vista Previa de Docente )}
{/* Modal Body Scrollable */}
{/* Top Hero & Video Preview Section */}
{/* Main Info */}

{course.title}

{course.subtitle}

{/* Meta stats */}
{course.rating.toFixed(1)} ({course.reviewsCount} reseñas)
👥 {course.studentsCount.toLocaleString()} estudiantes
{course.language}
Actualizado: {course.updatedAt}
{/* What You Will Learn Card */}

Lo que aprenderás en este curso

{course.whatYouWillLearn.map((item, idx) => (
{item}
))}
{/* Video Preview & Buy Box */}
{!isPlayingVideo ? ( <> {course.title}
Vista previa gratuita de lección
) : (

Reproduciendo Clase Muestra (HD)

Lección 1: Novedades y Configuración Inicial

)}
{/* Price & Checkout Card */}
${course.price.toFixed(2)} {course.originalPrice > course.price && ( ${course.originalPrice.toFixed(2)} )}
{discountPercent > 0 && ( {discountPercent}% Descuento )}
{/* If isTeacherPreview: Disable Buy & Cart buttons */} {isTeacherPreview ? (
) : (
)}
{course.duration} de video bajo demanda
{course.lessonsCount} lecciones descargables
Garantía de 30 días o te devolvemos el dinero
Certificado de acreditación oficial
{/* Nav Tabs inside modal */}
{/* Tab Content 1: Curriculum */} {activeTab === 'curriculum' && (
{course.modules.length} módulos • {course.lessonsCount} lecciones • {course.duration} duración total
{course.modules.map((mod) => { const isExpanded = !!expandedModules[mod.id]; return (
{isExpanded && (
{mod.lessons.map((lesson) => (
{lesson.title}
{lesson.isFreePreview && ( Vista Previa )} {lesson.duration}
))}
)}
); })}
)} {/* Tab Content 2: Instructor */} {activeTab === 'instructor' && (
{course.instructor.name}

{course.instructor.name}

{course.instructor.role}

{course.instructor.rating} Calificación 👨‍🎓 {course.instructor.totalStudents.toLocaleString()} Estudiantes 📚 {course.instructor.totalCourses} Cursos creados

{course.instructor.bio}

)} {/* Tab Content 3: Reviews */} {activeTab === 'reviews' && (
{course.reviews.map((rev) => (
{rev.userName}

{rev.userName}

{rev.date}
{[...Array(rev.rating)].map((_, i) => ( ))}

"{rev.comment}"

))}
)}
); };