import { useEffect, useState } from 'react'; import api from '../../services/api'; import { Trash2, Plus, Tag } from 'lucide-react'; import { formatDate } from '../../utils/formatters'; interface Coupon { id: number; code: string; discountType: 'Percentage' | 'Fixed'; discountValue: number; expiryDate?: string; usageCount: number; maxUsages?: number; isActive: boolean; } export default function CouponsPage() { const [coupons, setCoupons] = useState([]); const [loading, setLoading] = useState(true); const [showForm, setShowForm] = useState(false); // Form State const [newCoupon, setNewCoupon] = useState({ code: '', discountType: 'Percentage', discountValue: 0, expiryDate: '', maxUsages: '', maxUsagesPerUser: '' }); useEffect(() => { loadCoupons(); }, []); const loadCoupons = async () => { try { const res = await api.get('/coupons'); setCoupons(res.data); } catch (error) { console.error("Error loading coupons", error); } finally { setLoading(false); } }; const handleDelete = async (id: number) => { if (!confirm('¿Eliminar cupón?')) return; try { await api.delete(`/coupons/${id}`); loadCoupons(); } catch (error) { alert("Error al eliminar"); } }; const handleCreate = async (e: React.FormEvent) => { e.preventDefault(); try { const payload = { ...newCoupon, maxUsages: newCoupon.maxUsages ? parseInt(newCoupon.maxUsages) : null, maxUsagesPerUser: newCoupon.maxUsagesPerUser ? parseInt(newCoupon.maxUsagesPerUser) : null, expiryDate: newCoupon.expiryDate ? newCoupon.expiryDate : null }; await api.post('/coupons', payload); setShowForm(false); setNewCoupon({ code: '', discountType: 'Percentage', discountValue: 0, expiryDate: '', maxUsages: '', maxUsagesPerUser: '' }); loadCoupons(); } catch (error) { alert("Error al crear cupón"); } }; if (loading) return
Cargando...
; return (

Gestión de Cupones

{showForm && (
setNewCoupon({ ...newCoupon, code: e.target.value })} />
setNewCoupon({ ...newCoupon, discountValue: Number(e.target.value) })} />
setNewCoupon({ ...newCoupon, expiryDate: e.target.value })} />
setNewCoupon({ ...newCoupon, maxUsages: e.target.value })} />
setNewCoupon({ ...newCoupon, maxUsagesPerUser: e.target.value })} />
)}
{coupons.map(coupon => ( ))} {coupons.length === 0 && ( )}
Código Descuento Usos Expira Acciones
{coupon.code} {coupon.discountType === 'Percentage' ? `${coupon.discountValue}%` : `$${coupon.discountValue}`} {coupon.usageCount} {coupon.maxUsages ? `/ ${coupon.maxUsages}` : ''} {coupon.expiryDate ? formatDate(coupon.expiryDate) : '-'}
No hay cupones activos.
); }