"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import DarkThemeLayout from "../components/DarkThemeLayout"; import Navbar from "../components/Navbar"; interface User { id: string; username: string; points: number; referralCode: string; } interface Referral { id: string; username: string; joinedDate: string; pointsEarned: number; } interface ReferralStats { totalReferrals: number; totalPointsEarned: number; referrals: Referral[]; } export default function ReferralPage() { const router = useRouter(); const [user, setUser] = useState(null); const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [copied, setCopied] = useState(false); useEffect(() => { const token = localStorage.getItem("token"); if (!token) { router.push("/login"); return; } fetchData(); }, [router]); const fetchData = async () => { try { const token = localStorage.getItem("token"); const headers = { Authorization: `Bearer ${token}` }; const [userRes, statsRes] = await Promise.all([ fetch("/api/users/me", { headers }), fetch("/api/referrals", { headers }) ]); if (!userRes.ok || !statsRes.ok) { throw new Error("Failed to fetch data"); } const userData = await userRes.json(); const statsData = await statsRes.json(); if (userData.success && userData.data) { setUser({ id: userData.data.id, username: userData.data.name, points: userData.data.pointsBalance || 0, referralCode: userData.data.referralCode || userData.data.id.slice(0, 8), }); } if (statsData.success && statsData.data) { setStats(statsData.data); } } catch (error) { console.error("Error fetching data:", error); localStorage.removeItem("token"); router.push("/login"); } finally { setLoading(false); } }; const copyReferralCode = () => { if (user) { const referralUrl = `${window.location.origin}/register?ref=${user.referralCode}`; navigator.clipboard.writeText(referralUrl); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; const shareToSocial = (platform: string) => { if (!user) return; const referralUrl = `${window.location.origin}/register?ref=${user.referralCode}`; const text = "Join me on EarnPlay and start earning points!"; const urls: Record = { twitter: `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(referralUrl)}`, facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(referralUrl)}`, whatsapp: `https://wa.me/?text=${encodeURIComponent(text + " " + referralUrl)}`, telegram: `https://t.me/share/url?url=${encodeURIComponent(referralUrl)}&text=${encodeURIComponent(text)}` }; window.open(urls[platform], "_blank", "width=600,height=400"); }; if (loading) { return (
); } if (!user || !stats) { return null; } const referralUrl = `${typeof window !== "undefined" ? window.location.origin : ""}/register?ref=${user.referralCode}`; return ( <>

Referral Program

Invite friends and earn rewards together

Your Referral Code

Referral URL

{referralUrl}

Your Referrals

{stats.referrals.length === 0 ? (

No referrals yet

Share your code to start earning!

) : (
{stats.referrals.map(referral => (
{referral.username[0].toUpperCase()}

{referral.username}

Joined {new Date(referral.joinedDate).toLocaleDateString()}

+{referral.pointsEarned}

points earned

))}
)}

Referral Stats

Total Referrals

{stats.totalReferrals}

Total Points Earned

+{stats.totalPointsEarned}

How it works

  • Share your unique referral link with friends
  • They sign up using your link
  • You both earn bonus points!
  • Unlimited referrals = unlimited rewards
); }