'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; import { Shield, ArrowLeft, Users, Gift, TrendingUp, Calendar, CheckCircle, XCircle, Clock, Copy, Share2 } from 'lucide-react'; interface ReferralStats { referral_count: number; bonus_days_earned: number; total_referrals_used: number; created_at: string; updated_at: string; } interface ReferredUser { username: string; created_at: string; status: string; } export default function ReferralPage() { const router = useRouter(); const [stats, setStats] = useState(null); const [referredUsers, setReferredUsers] = useState([]); const [loading, setLoading] = useState(true); const [username, setUsername] = useState(''); const [referralUrl, setReferralUrl] = useState(''); const [showToast, setShowToast] = useState(false); const [toastMessage, setToastMessage] = useState(''); useEffect(() => { const loadReferralStats = async () => { // Get username from localStorage const token = localStorage.getItem('subscriptionToken'); if (!token) { router.push('/'); return; } const userId = token.split('_')[0]; setUsername(userId); // Generate referral URL const botUsername = process.env.NEXT_PUBLIC_TELEGRAM_BOT_USERNAME || 'Dorod_vps_bot'; const url = `https://t.me/${botUsername}?start=ref_${userId}`; setReferralUrl(url); // Fetch stats from API try { const response = await fetch(`/api/referral/stats?username=${userId}`); const data = await response.json(); if (data.success && data.hasReferrals) { setStats(data.stats); setReferredUsers(data.referred_users || []); } } catch (error) { console.error('Failed to load referral stats:', error); } finally { setLoading(false); } }; loadReferralStats(); }, [router]); const copyToClipboard = async (text: string) => { try { await navigator.clipboard.writeText(text); showToastNotification('✅ Скопировано в буфер обмена!'); } catch (err) { console.error('Failed to copy:', err); showToastNotification('❌ Ошибка копирования'); } }; const showToastNotification = (message: string) => { setToastMessage(message); setShowToast(true); setTimeout(() => setShowToast(false), 3000); }; const shareReferralLink = async () => { const shareText = `🚀 Попробуй Umbrix VPN - быстрый и безопасный VPN!\n\n✨ Получи 7 дней бесплатно по моей ссылке:\n${referralUrl}`; if (navigator.share) { try { await navigator.share({ title: 'Umbrix VPN - Пригласи друга!', text: shareText, url: referralUrl, }); } catch (err) { if ((err as Error).name !== 'AbortError') { console.error('Share failed:', err); copyToClipboard(shareText); } } } else { copyToClipboard(shareText); } }; const getStatusIcon = (status: string) => { switch (status) { case 'active': return ; case 'expired': return ; case 'disabled': return ; default: return ; } }; const getStatusText = (status: string) => { switch (status) { case 'active': return 'Активен'; case 'expired': return 'Истёк'; case 'disabled': return 'Отключён'; default: return status; } }; if (loading) { return (

Загрузка...

); } return (
{/* Header */}
Реферальная программа
{/* Spacer */}
{/* Main Content */}
{/* Stats Cards */}
{stats?.referral_count || 0}
Рефералов
{stats?.bonus_days_earned || 0}
Дней бонуса
+{(stats?.referral_count || 0) >= 5 ? 30 : 0}
Milestone
{/* Referral Link */}

Ваша реферальная ссылка

{/* Bonus Info */}

💰 Как работают бонусы

  • +7 дней за каждого приглашённого друга
  • +30 дней бонус за каждые 5 рефералов
  • Бонусы начисляются автоматически
{/* Referred Users */} {referredUsers.length > 0 && (

Ваши рефералы ({referredUsers.length})

{referredUsers.map((user, index) => (
{getStatusIcon(user.status)}
{user.username}
{new Date(user.created_at).toLocaleDateString('ru-RU')}
{getStatusText(user.status)}
))}
)} {referredUsers.length === 0 && (

Пока нет рефералов

Поделитесь ссылкой с друзьями!

)}
{/* Toast Notification */} {showToast && (
{toastMessage}
)}
); }