import { createClient } from "@/lib/supabase/server"; import { Card, CardContent, Badge } from "poyraz-ui/atoms"; import { FolderKanban, CheckCircle2, Clock, Activity, Wallet, BarChart } from "lucide-react"; import Link from "next/link"; import { format } from "date-fns"; import { tr } from "date-fns/locale"; export default async function PortalDashboardPage() { const supabase = await createClient(); const { data: { user } } = await supabase.auth.getUser(); if (!user) return null; // 1. Get the Client record const { data: clientData } = await supabase .from("clients") .select("id, name, company_name") .eq("client_auth_id", user.id) .single(); if (!clientData) { return (

Hesabınız Henüz Aktif Değil

Freelancer'ınız sizin için hesabı oluşturdu ancak müşteri kartınızla henüz eşleşmedi veya bir hata oluştu. Lütfen iletişime geçin.

); } // 2. Get Projects const { data: projectsData } = await supabase .from("projects") .select("id, name, status, progress, due_date, budget_amount, currency, created_at") .eq("client_id", clientData.id) .order("created_at", { ascending: false }); const projects = projectsData || []; const activeProjects = projects.filter(p => p.status !== 'completed' && p.status !== 'cancelled'); const completedProjects = projects.filter(p => p.status === 'completed'); const totalBudget = activeProjects.reduce((sum, p) => sum + (Number(p.budget_amount) || 0), 0); const avgProgress = projects.length > 0 ? (projects.reduce((sum, p) => sum + (p.progress || 0), 0) / projects.length).toFixed(0) : "0"; const formatCurrency = (val: number) => { return new Intl.NumberFormat("tr-TR", { style: "currency", currency: projects[0]?.currency || "USD", maximumFractionDigits: 0, }).format(val); }; return (
{/* Header */}
Genel Bakış

Müşteri Paneli

Hoş geldiniz, {clientData.name}. Aktif projelerinizi, ilerlemeleri ve bütçe durumunuzu buradan takip edin.

{/* KPI Cards */}
{/* Projects */}

Tüm Projeleriniz

{projects.length === 0 ? (
Henüz size atanmış bir proje bulunmuyor.
) : ( projects.map(project => (

{project.name}

{project.status === 'completed' ? 'Tamamlandı' : project.status === 'active' ? 'Aktif' : 'Beklemede'} {project.due_date && (
Teslim: {format(new Date(project.due_date), 'd MMM yyyy', { locale: tr })}
)}
İlerleme %{project.progress}
)) )}
); } function StatCard({ label, value, icon: Icon, tone, }: { label: string; value: string; icon: any; tone: "green" | "blue" | "amber" | "red"; }) { const toneClass = { green: "bg-emerald-50 text-emerald-700", blue: "bg-blue-50 text-blue-700", amber: "bg-amber-50 text-amber-700", red: "bg-primary/10 text-primary", }[tone]; return (

{label}

{value}

); }