import React, { useState } from 'react'; import { FiX, FiTrash2, FiShoppingCart, FiTag, FiCheckCircle, FiArrowRight, FiLock, FiShield } from 'react-icons/fi'; import type { CartItem } from '../../types/course'; interface CartDrawerProps { isOpen: boolean; cartItems: CartItem[]; onClose: () => void; onRemoveItem: (courseId: string) => void; onClearCart: () => void; } export const CartDrawer: React.FC = ({ isOpen, cartItems, onClose, onRemoveItem, onClearCart, }) => { const [couponCode, setCouponCode] = useState(''); const [appliedDiscount, setAppliedDiscount] = useState(0); const [couponMessage, setCouponMessage] = useState(null); const [isCheckingOut, setIsCheckingOut] = useState(false); const [checkoutSuccess, setCheckoutSuccess] = useState(false); if (!isOpen) return null; const rawSubtotal = cartItems.reduce((acc, item) => acc + item.course.price, 0); const discountAmount = (rawSubtotal * appliedDiscount) / 100; const finalTotal = Math.max(0, rawSubtotal - discountAmount); const handleApplyCoupon = (e: React.FormEvent) => { e.preventDefault(); const code = couponCode.trim().toUpperCase(); if (code === 'DESCUENTO20' || code === 'PROMO20') { setAppliedDiscount(20); setCouponMessage('¡Cupón del 20% aplicado con éxito!'); } else if (code === 'PROMO50' || code === 'RYNEXT50') { setAppliedDiscount(50); setCouponMessage('¡Cupón especial del 50% de descuento aplicado!'); } else if (code.length > 0) { setCouponMessage('Cupón no válido. Prueba con "DESCUENTO20" o "RYNEXT50"'); } }; const handleCheckout = () => { setIsCheckingOut(true); setTimeout(() => { setIsCheckingOut(false); setCheckoutSuccess(true); setTimeout(() => { setCheckoutSuccess(false); onClearCart(); onClose(); }, 3000); }, 1500); }; return (
{/* Slide panel */}
{/* Top Header */}

Carrito de Compras

{cartItems.length} {cartItems.length === 1 ? 'curso seleccionado' : 'cursos seleccionados'}

{/* Cart Items List */}
{checkoutSuccess ? (

¡Compra Realizada con Éxito!

Hemos enviado los accesos a tu correo. Tus cursos ya están disponibles en tu biblioteca de aprendizaje.

Orden #RY-{Math.floor(100000 + Math.random() * 900000)}
) : cartItems.length > 0 ? ( cartItems.map((item) => (
{item.course.title}

{item.course.title}

Por {item.course.instructor.name}

${item.course.price.toFixed(2)}
)) ) : (

Tu carrito está vacío

Explora nuestro catálogo de cursos en desarrollo, IA y diseño para comenzar.

)}
{/* Bottom Summary & Checkout Form */} {cartItems.length > 0 && !checkoutSuccess && (
{/* Coupon Form */}
setCouponCode(e.target.value)} placeholder="Cupón (ej. DESCUENTO20)" className="w-full pl-8 pr-3 py-2 bg-slate-900 border border-slate-700 rounded-lg text-xs text-white placeholder-slate-500 focus:outline-none focus:border-cyan-500 uppercase" />
{couponMessage && (

0 ? 'text-emerald-400' : 'text-amber-400'}`}> {couponMessage}

)}
{/* Price Breakdown */}
Subtotal ${rawSubtotal.toFixed(2)}
{appliedDiscount > 0 && (
Descuento ({appliedDiscount}%) -${discountAmount.toFixed(2)}
)}
Total a pagar ${finalTotal.toFixed(2)}
{/* Checkout Button */}
Garantía total de devolución de 30 días
)}
); };