'use client'; import { useState, useEffect } from 'react'; import { useAuth } from '@/contexts/AuthContext'; import { usersApi } from '@/lib/api/users'; import { packagesApi } from '@/lib/api/packages'; import UserSearch from '@/components/admin/users/UserSearch'; import UserInfo from '@/components/admin/users/UserInfo'; import UserProducts from '@/components/admin/users/UserProducts'; import PackageSelector from '@/components/admin/users/PackageSelector'; import { User, Product } from '@/types/user'; import { PackageName } from '@/types/package'; import { formatPrice, getProductTypeLabel } from '@/lib/utils'; export default function UsersPage() { const { token } = useAuth(); const [user, setUser] = useState(null); const [products, setProducts] = useState([]); const [packages, setPackages] = useState([]); const [selectedPackage, setSelectedPackage] = useState(null); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); // Load packages on mount useEffect(() => { if (token) { loadPackages(); } }, [token]); // Load products when package changes useEffect(() => { if (token && selectedPackage) { loadProducts(selectedPackage); } }, [selectedPackage, token]); const loadPackages = async () => { try { const data = await packagesApi.getAllPackages(token!); setPackages(data); if (data.length > 0 && !selectedPackage) { setSelectedPackage(data[0].name!); } } catch (err) { console.error('Failed to load packages:', err); setError('خطا در دریافت لیست پکیج‌ها'); } }; const loadProducts = async (packageName: string) => { try { console.log('Loading products for package:', packageName); const data = await usersApi.getProductsByPackage(packageName, token!); console.log('Products loaded:', data); setProducts(data); } catch (err) { console.error('Failed to load products:', err); setError('خطا در دریافت محصولات'); } }; const handleSearch = async (searchTerm: string) => { if (!selectedPackage) { setError('لطفا ابتدا یک پکیج انتخاب کنید'); return; } setIsLoading(true); setError(null); setUser(null); try { console.log('Searching for user:', searchTerm, 'in package:', selectedPackage); const userData = await usersApi.getUserStatus(searchTerm, selectedPackage, token!); console.log('User data:', userData); setUser(userData); } catch (err) { setError(err instanceof Error ? err.message : 'خطا در دریافت اطلاعات کاربر'); } finally { setIsLoading(false); } }; const handleSubscribe = async (productId: number) => { if (!user) return; // Get identifier (email or mobile) with null check const identifier = user.email || user.mobile; if (!identifier) { setError('کاربر فاقد ایمیل یا شماره موبایل است'); return; } setIsLoading(true); setError(null); setSuccess(null); try { console.log('Subscribing user:', identifier, 'to product:', productId); await usersApi.subscribeUser(identifier, productId, token!); setSuccess('اشتراک با موفقیت اضافه شد'); // Refresh user data with current selected package if (selectedPackage) { const userData = await usersApi.getUserStatus(identifier, selectedPackage, token!); setUser(userData); } } catch (err) { setError(err instanceof Error ? err.message : 'خطا در افزودن اشتراک'); } finally { setIsLoading(false); } }; const handleUnsubscribe = async (productId: number) => { if (!user) return; // Get identifier (email or mobile) with null check const identifier = user.email || user.mobile; if (!identifier) { setError('کاربر فاقد ایمیل یا شماره موبایل است'); return; } setIsLoading(true); setError(null); setSuccess(null); try { console.log('Unsubscribing user:', identifier, 'from product:', productId); await usersApi.unsubscribeUser(identifier, productId, token!); setSuccess('اشتراک با موفقیت لغو شد'); // Refresh user data with current selected package if (selectedPackage) { const userData = await usersApi.getUserStatus(identifier, selectedPackage, token!); setUser(userData); } } catch (err) { setError(err instanceof Error ? err.message : 'خطا در لغو اشتراک'); } finally { setIsLoading(false); } }; const handlePackageChange = (packageName: string) => { console.log('Package changed to:', packageName); setSelectedPackage(packageName); // Clear user when package changes to avoid showing wrong data setUser(null); setError(null); setSuccess(null); }; // Filter available products (show ALL products, don't filter out ones user already has) const availableProducts = products; console.log('Current state:', { selectedPackage, productsCount: products.length, userProductsCount: user?.products?.length, availableProductsCount: availableProducts.length }); return (

مدیریت کاربران

{/* Package Selector */} {token && ( )} {/* Search Section - Only show if package is selected */} {selectedPackage && ( )} {/* Messages */} {error && (

{error}

)} {success && (

{success}

)} {/* No Package Selected Message */} {!selectedPackage && packages.length === 0 && (

هیچ پکیجی یافت نشد. ابتدا یک پکیج ایجاد کنید.

)} {/* Show products list even without user */} {selectedPackage && products.length > 0 && !user && (

محصولات موجود در پکیج {selectedPackage}

{products.map((product) => (

{product.title || 'محصول'}

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

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

))}

برای افزودن اشتراک به کاربر، ابتدا یک کاربر جستجو کنید

)} {/* User Info */} {user && } {/* User Products */} {user && selectedPackage && ( )}
); }