"use client"; import { motion } from "framer-motion"; import { FolderOpen, PlayCircle, CheckCircle2, Coins, Plus, ArrowUpRight, Clock, Sparkles, TrendingUp, Loader2, Twitter, } from "lucide-react"; import Link from "next/link"; import { DashboardCharts } from "@/components/dashboard/dashboard-charts"; import { RecentProjects } from "@/components/dashboard/recent-projects"; import { TweetImportCard } from "@/components/dashboard/tweet-import-card"; import { useDashboardStats, useCreditBalance } from "@/hooks/use-api"; const stagger = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { staggerChildren: 0.08 }, }, }; const fadeUp = { hidden: { opacity: 0, y: 16 }, show: { opacity: 1, y: 0, transition: { duration: 0.5, ease: [0.16, 1, 0.3, 1] as const } }, }; // Mock-mode: Backend yokken statik veri kullan const isMockMode = process.env.NEXT_PUBLIC_ENABLE_MOCK_MODE === "true"; const MOCK_STATS = { totalProjects: 12, completedVideos: 8, activeRenderJobs: 2, totalCreditsUsed: 27, creditsRemaining: 47, }; function getStatCards(data?: typeof MOCK_STATS, creditBalance?: { balance: number; monthlyLimit: number }) { const stats = data ?? MOCK_STATS; const credits = creditBalance ?? { balance: stats.creditsRemaining, monthlyLimit: 50 }; return [ { label: "Toplam Proje", value: String(stats.totalProjects), change: `${stats.completedVideos} tamamlandı`, icon: FolderOpen, gradient: "from-violet-500/12 to-violet-600/5", iconBg: "bg-violet-500/12", iconColor: "text-violet-400", }, { label: "Devam Eden", value: String(stats.activeRenderJobs), change: "İşleniyor", icon: PlayCircle, gradient: "from-cyan-500/12 to-cyan-600/5", iconBg: "bg-cyan-500/12", iconColor: "text-cyan-400", }, { label: "Tamamlanan", value: String(stats.completedVideos), change: "Bu ay", icon: CheckCircle2, gradient: "from-emerald-500/12 to-emerald-600/5", iconBg: "bg-emerald-500/12", iconColor: "text-emerald-400", }, { label: "Kalan Kredi", value: String(credits.balance), change: `${credits.monthlyLimit} üzerinden`, icon: Coins, gradient: "from-amber-500/12 to-amber-600/5", iconBg: "bg-amber-500/12", iconColor: "text-amber-400", }, ]; } export default function DashboardPage() { // Real API hook'ları — mock modunda çağrılmaz const statsQuery = useDashboardStats(); const creditQuery = useCreditBalance(); // Mock/Real veri birleştir const isLoading = !isMockMode && (statsQuery.isLoading || creditQuery.isLoading); const statsData = isMockMode ? MOCK_STATS : (statsQuery.data as typeof MOCK_STATS | undefined); const creditData = isMockMode ? undefined : (creditQuery.data as { balance: number; monthlyLimit: number } | undefined); const statCards = getStatCards(statsData, creditData); return ( {/* ── Başlık + CTA ── */}

Hoş geldin 👋

AI ile videolarını oluşturmaya devam et

Yeni Proje
{/* ── İstatistik Kartları ── */} {isLoading ? (
) : ( statCards.map((stat) => { const Icon = stat.icon; return (
{stat.value}
{stat.label} {stat.change}
); }) )}
{/* ── Hızlı Eylemler ── */}

AI ile Video Oluştur

Bir konu gir, gerisini AI halletsin

Şablon Keşfet

Topluluk şablonlarını kullan

Devam Eden İşler

İşlenen videolarını takip et

{ e.preventDefault(); document.getElementById('tweet-import')?.scrollIntoView({ behavior: 'smooth' }); }} >

Tweet → Video

Viral tweet'leri videoya dönüştür

{/* ── Tweet Import + Grafikler ── */}
{ window.location.href = `/dashboard/projects/${id}`; }} />
{/* ── Son Projeler ── */}
); }