import { ChartPie, ChevronRight, Coins, HandCoins, ShoppingCart, Tags, Target, Trash2, TrendingUp, Users, } from "lucide-react"; import type { Metadata } from "next"; import Link from "next/link"; import { notFound } from "next/navigation"; import { PageHeader } from "@/components/page-header"; import { monthLabel, formatPct } from "@/features/reports/components/report-frame"; import { getCategoryReport, getTrendReport } from "@/features/reports/service"; import { tr } from "@/i18n/tr"; import { requireActiveHousehold } from "@/lib/dal"; import { cn } from "@/lib/utils"; import { formatMoney } from "@/shared/format"; const t = tr.reports; export const metadata: Metadata = { title: t.title }; const REPORTS = [ { href: "/raporlar/kategoriler", key: "categories", icon: ChartPie }, { href: "/raporlar/trend", key: "trend", icon: TrendingUp }, { href: "/raporlar/kisi-hesap", key: "people", icon: Users }, { href: "/raporlar/butce", key: "budget", icon: Target }, { href: "/raporlar/cari", key: "contacts", icon: HandCoins }, { href: "/raporlar/birikim", key: "assets", icon: Coins }, { href: "/raporlar/alisveris", key: "shopping", icon: ShoppingCart }, { href: "/raporlar/birim-fiyat", key: "unitPrice", icon: Tags }, { href: "/raporlar/fire", key: "waste", icon: Trash2 }, ] as const; /** /raporlar — bu bütçe ayının özeti ve raporlar. */ export default async function ReportsPage() { const { user, household } = await requireActiveHousehold("viewer"); const [trend, cats] = await Promise.all([ getTrendReport(user.id, household.id, 1), getCategoryReport(user.id, household.id), ]); if (!trend || !cats) notFound(); const m = trend.months[0]!; const top = cats.breakdown.rows.filter((r) => r.amountMinor > 0).slice(0, 3); const stats = [ { label: t.hub.income, value: formatMoney(m.incomeMinor), tone: "text-income" }, { label: t.hub.expense, value: formatMoney(m.expenseMinor), tone: "text-expense" }, { label: t.hub.net, value: `${m.netMinor < 0 ? "−" : ""}${formatMoney(Math.abs(m.netMinor))}`, tone: m.netMinor < 0 ? "text-expense" : undefined, }, { label: t.hub.savings, value: formatPct(m.savingsPct) }, ]; return ( <>

{t.hub.thisMonth}: {monthLabel(m.month)}{" "} ({t.trend.ongoing})

{stats.map((s) => (
{s.label}
{s.value}
))}
{top.length ? (

{t.hub.topCategories}

    {top.map((r) => (
  • {r.name} {formatMoney(r.amountMinor)}{" "} · {formatPct(r.sharePct)}
  • ))}
) : null}
); }