+ {(['info', 'subscription', 'balance', 'sync'] as const).map((tab) => (
+
+ ))}
+
+ {/* Info Tab */}
+ {activeTab === 'info' && (
+
+ {/* Status */}
+
+
Статус
+
+
+ {user.status === 'active' ? (
+
+ ) : user.status === 'blocked' ? (
+
+ ) : null}
+
+
+
+ {/* Details grid */}
+
+
+
Email
+
{user.email || '-'}
+
+
+
Язык
+
{user.language}
+
+
+
Регистрация
+
{formatDate(user.created_at)}
+
+
+
Последняя активность
+
{formatDate(user.last_activity)}
+
+
+
Всего потрачено
+
{formatMoney(user.total_spent_kopeks)}
+
+
+
Покупок
+
{user.purchase_count}
+
+
+
+ {/* Referral */}
+
+
Реферальная программа
+
+
+
{user.referral.referrals_count}
+
Рефералов
+
+
+
{formatMoney(user.referral.total_earnings_kopeks)}
+
Заработано
+
+
+
{user.referral.commission_percent || 0}%
+
Комиссия
+
+
+
+
+ {/* Restrictions */}
+ {(user.restriction_topup || user.restriction_subscription) && (
+
+
Ограничения
+ {user.restriction_topup &&
• Запрет пополнения
}
+ {user.restriction_subscription &&
• Запрет покупки подписки
}
+ {user.restriction_reason &&
Причина: {user.restriction_reason}
}
+
+ )}
+
+ )}
+
+ {/* Subscription Tab */}
+ {activeTab === 'subscription' && (
+
+ {user.subscription ? (
+ <>
+ {/* Current subscription */}
+
+
+ Текущая подписка
+
+
+
+
+
Тариф
+
{user.subscription.tariff_name || 'Не указан'}
+
+
+
Действует до
+
{formatDate(user.subscription.end_date)}
+
+
+
Трафик
+
+ {user.subscription.traffic_used_gb.toFixed(1)} / {user.subscription.traffic_limit_gb} ГБ
+
+
+
+
Устройств
+
{user.subscription.device_limit}
+
+
+
+
+ {/* Actions */}
+
+
Действия
+
+
+
+ {subAction === 'extend' && (
+ setSubDays(e.target.value)}
+ placeholder="Дней"
+ className="w-full bg-dark-700 border border-dark-600 rounded-lg px-3 py-2 text-dark-100"
+ />
+ )}
+
+ {subAction === 'change_tariff' && (
+
+ )}
+
+
+
+
+ >
+ ) : (
+
+
Нет активной подписки
+
+
+ setSubDays(e.target.value)}
+ placeholder="Дней"
+ className="w-full bg-dark-700 border border-dark-600 rounded-lg px-3 py-2 text-dark-100"
+ />
+
+
+
+ )}
+
+ )}
+
+ {/* Balance Tab */}
+ {activeTab === 'balance' && (
+
+ {/* Current balance */}
+
+
Текущий баланс
+
{formatMoney(user.balance_kopeks)}
+
+
+ {/* Add/subtract form */}
+
+
setBalanceAmount(e.target.value)}
+ placeholder="Сумма в рублях"
+ className="w-full bg-dark-700 border border-dark-600 rounded-lg px-3 py-2 text-dark-100"
+ />
+
setBalanceDescription(e.target.value)}
+ placeholder="Описание (опционально)"
+ className="w-full bg-dark-700 border border-dark-600 rounded-lg px-3 py-2 text-dark-100"
+ />
+
+
+
+
+
+
+ {/* Recent transactions */}
+ {user.recent_transactions.length > 0 && (
+
+
Последние транзакции
+
+ {user.recent_transactions.map((tx) => (
+
+
+
{tx.description || tx.type}
+
{formatDate(tx.created_at)}
+
+
= 0 ? 'text-emerald-400' : 'text-rose-400'}>
+ {tx.amount_kopeks >= 0 ? '+' : ''}{formatMoney(tx.amount_kopeks)}
+
+
+ ))}
+
+
+ )}
+
+ )}
+
+ {/* Sync Tab */}
+ {activeTab === 'sync' && (
+
+ {/* Sync status */}
+ {syncStatus && (
+
+
+ {syncStatus.has_differences ? (
+ Есть расхождения
+ ) : (
+ Синхронизировано
+ )}
+
+
+ {syncStatus.differences.length > 0 && (
+
+ {syncStatus.differences.map((diff, i) => (
+
• {diff}
+ ))}
+
+ )}
+
+
+
+
Бот
+
+
+ Статус:
+ {syncStatus.bot_subscription_status || '-'}
+
+
+ Трафик:
+ {syncStatus.bot_traffic_used_gb.toFixed(2)} ГБ
+
+
+
+
+
Панель
+
+
+ Статус:
+ {syncStatus.panel_status || '-'}
+
+
+ Трафик:
+ {syncStatus.panel_traffic_used_gb.toFixed(2)} ГБ
+
+
+
+
+
+ )}
+
+ {/* UUID info */}
+
+
Remnawave UUID
+
+ {user.remnawave_uuid || 'Не привязан'}
+
+
+
+ {/* Sync buttons */}
+
+
+
+
+
+ )}
+