'use client'; import { UserProduct } from '@/types/user'; import { formatDate, formatPrice, getProductTypeLabel } from '@/lib/utils'; import { CheckCircleIcon, XCircleIcon, PlusCircleIcon } from '@heroicons/react/24/outline'; import { useState } from 'react'; interface UserProductsProps { products: UserProduct[]; onSubscribe: (productId: number) => void; onUnsubscribe: (productId: number) => void; isLoading: boolean; availableProducts: { id: number; title: string | null; packageName?: string }[]; selectedPackage?: string | null; } export default function UserProducts({ products, onSubscribe, onUnsubscribe, isLoading, availableProducts, selectedPackage }: UserProductsProps) { const [selectedProductId, setSelectedProductId] = useState(null); const getSubscriptionStatus = (product: UserProduct) => { if (!product.pivot?.expire_at) { return { isActive: false, text: 'نامشخص', color: 'text-gray-600', icon: XCircleIcon }; } const expireDate = new Date(product.pivot.expire_at); const now = new Date(); const isActive = expireDate > now; return { isActive, text: isActive ? 'فعال' : 'منقضی شده', color: isActive ? 'text-green-600' : 'text-red-600', icon: isActive ? CheckCircleIcon : XCircleIcon }; }; // Get count of subscriptions for a specific product const getSubscriptionCount = (productId: number): number => { return products.filter(p => p.id === productId).length; }; // Group products by package const productsByPackage = products.reduce((acc, product) => { const packageName = product.package_name?.name || 'نامشخص'; if (!acc[packageName]) { acc[packageName] = []; } acc[packageName].push(product); return acc; }, {} as Record); const handleSubscribeClick = (productId: number) => { setSelectedProductId(productId); onSubscribe(productId); }; return (

اشتراک‌های کاربر

{/* Current Subscriptions grouped by package */}
{Object.keys(productsByPackage).length > 0 ? ( Object.entries(productsByPackage).map(([packageName, packageProducts]) => (

پکیج: {packageName}

    {packageProducts.map((product) => { const status = getSubscriptionStatus(product); const StatusIcon = status.icon; const subscriptionCount = getSubscriptionCount(product.id); return (
  • {product.title || 'محصول'}

    {subscriptionCount > 1 && ( {subscriptionCount} اشتراک )}

    {status.text}

    قیمت: {formatPrice(product.price)} تومان

    نوع: {getProductTypeLabel(product.type)}

    {product.pivot?.expire_at && (

    تاریخ انقضا: {formatDate(product.pivot.expire_at)}

    )}
  • ); })}
)) ) : (
کاربر هیچ اشتراکی ندارد
)}
{/* Available Products for Subscription */} {availableProducts && availableProducts.length > 0 && selectedPackage && (

افزودن اشتراک جدید برای پکیج {selectedPackage}

{availableProducts.map((product) => { const subscriptionCount = getSubscriptionCount(product.id); return ( ); })}
)}
); }