import React, { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { BarChart3, TrendingUp, Users, Target, Clock, Zap, Award, Code, MessageSquare, ShoppingCart, Download, Loader2 } from "lucide-react"; import { supabase } from "@/lib/supabase"; import { useAuth } from "@/lib/auth"; interface StatCard { label: string; value: string | number; change: number; icon: React.ReactNode; color: string; } interface ActivityData { date: string; projects: number; messages: number; earnings: number; achievements: number; } export default function Analytics() { const { user } = useAuth(); const [timeRange, setTimeRange] = useState("7d"); const [stats, setStats] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { if (user?.id) fetchAnalytics(); }, [user, timeRange]); const fetchAnalytics = async () => { try { const { data: analytics } = await supabase .from('user_analytics') .select('*') .eq('user_id', user?.id) .single(); if (analytics) { setStats([ { label: "Total Projects", value: analytics.projects_completed || 0, change: 25, icon: , color: "text-blue-400" }, { label: "Active Messages", value: analytics.messages_sent || 0, change: 12, icon: , color: "text-purple-400" }, { label: "Total XP", value: analytics.total_xp || 0, change: 34, icon: , color: "text-yellow-400" }, { label: "Achievements", value: analytics.achievements_unlocked || 0, change: 8, icon: , color: "text-green-400" }, { label: "Marketplace Purchases", value: analytics.marketplace_purchases || 0, change: 18, icon: , color: "text-cyan-400" }, { label: "Code Snippets", value: analytics.code_snippets_shared || 0, change: 42, icon: , color: "text-pink-400" } ]); } } catch (err) { console.error('Error fetching analytics:', err); } finally { setLoading(false); } }; const activityData: ActivityData[] = [ { date: "Mon", projects: 2, messages: 8, earnings: 120, achievements: 1 }, { date: "Tue", projects: 1, messages: 12, earnings: 180, achievements: 0 }, { date: "Wed", projects: 3, messages: 15, earnings: 250, achievements: 2 }, { date: "Thu", projects: 2, messages: 10, earnings: 160, achievements: 1 }, { date: "Fri", projects: 4, messages: 18, earnings: 320, achievements: 3 }, { date: "Sat", projects: 1, messages: 6, earnings: 90, achievements: 0 }, { date: "Sun", projects: 2, messages: 9, earnings: 140, achievements: 1 } ]; const topActivities = [ { name: "Code Gallery Views", count: 1240, growth: "+24%" }, { name: "Marketplace Purchases", count: 48, growth: "+12%" }, { name: "Project Completions", count: 12, growth: "+50%" }, { name: "Social Connections", count: 156, growth: "+18%" }, { name: "Achievement Unlocks", count: 23, growth: "+8%" } ]; const maxValue = Math.max( ...activityData.map(d => Math.max(d.projects, d.messages, d.earnings / 50, d.achievements)) ); return (
{/* Header */}

Analytics

Track your growth and engagement

{/* Stats Grid */}
{stats.map((stat, idx) => (
{stat.icon}
+{stat.change}%

{stat.label}

{stat.value}

))}
{/* Charts and Activity */}
{/* Activity Chart */}

Weekly Activity

{/* Projects Chart */}
Projects Created 7 days
{activityData.map((data, idx) => (

{data.date}

))}
{/* Messages Chart */}
Messages Sent 7 days
{activityData.map((data, idx) => (

{data.date}

))}
{/* Top Activities */}

Top Activities

{topActivities.map((activity, idx) => (
{activity.name} {activity.growth}
{activity.count}
))}
{/* Engagement Metrics */}

Engagement Metrics

{[ { label: "Avg Daily Active Time", value: "4h 32m", change: "+15 min" }, { label: "Project Engagement", value: "87%", change: "+5%" }, { label: "Community Contribution", value: "High", change: "Active" }, { label: "Learning Progress", value: "62%", change: "+8%" } ].map((metric, idx) => (

{metric.label}

{metric.value}

{metric.change}

))}
{/* Goal Progress */}

Goals & Progress

{[ { goal: "Complete 15 Projects", current: 12, target: 15, color: "bg-blue-500" }, { goal: "Earn 5,000 LP", current: 2450, target: 5000, color: "bg-yellow-500" }, { goal: "Unlock 30 Achievements", current: 23, target: 30, color: "bg-purple-500" }, { goal: "Build 500 Network Connections", current: 156, target: 500, color: "bg-cyan-500" } ].map((item, idx) => (
{item.goal} {item.current}/{item.target}
))}
); }