import { AlertTriangle, Landmark } from "lucide-react"; import Link from "next/link"; import { KAKEIBO_COLOR, KakeiboDot } from "@/features/categories/components/kakeibo-badge"; import { tr } from "@/i18n/tr"; import { cn } from "@/lib/utils"; import { formatMoney } from "@/shared/format"; import { KAKEIBO_GROUPS, type KakeiboGroup } from "@/shared/kakeibo"; import type { KakeiboReport } from "../kakeibo"; import { Change, formatPct } from "./report-frame"; const k = tr.kakeibo; const t = tr.reports.kakeiboReport; /** Dört grubun (ve grupsuzun) harcamadaki payı: tek yığılmış çubuk + lejant + tablo. */ function Composition({ data }: { data: KakeiboReport }) { const s = data.now.summary; const parts = [ ...KAKEIBO_GROUPS.map((g) => ({ key: g, label: k.groups[g], share: s.shares[g], color: KAKEIBO_COLOR[g], })), ...(s.ungroupedMinor ? [ { key: "UNGROUPED", label: k.ungrouped, share: s.ungroupedShare, color: "var(--muted-foreground)", }, ] : []), ].filter((p) => p.share > 0); return (
{parts.map((p) => (
))}
); } function GroupCard({ data, group }: { data: KakeiboReport; group: KakeiboGroup }) { const s = data.now.summary; const rows = data.now.byClass[group]; const ch = data.change[group]; return (

{k.groups[group]}

{k.groupHints[group]}

{formatMoney(s.groups[group])}

{formatPct(s.shares[group])} ·{" "}

{rows.length ? ( ) : (

{t.noSpending}

)}
); } /** /raporlar/kakeibo — dört grup, banka maliyeti ve grupsuz harcamalar. */ export function KakeiboReportView({ data }: { data: KakeiboReport }) { const s = data.now.summary; const bank = data.now.byClass.BANK_COST; const ungrouped = data.now.byClass.UNGROUPED; const bankChange = data.change.BANK_COST; return (
{t.spending} {formatMoney(s.spendingMinor)}
{k.bankCost} {formatMoney(s.bankCostMinor)} {t.bankCostNote}
{ungrouped.length ? (

{k.ungrouped}: {formatMoney(s.ungroupedMinor)}

{t.ungroupedHelp}{" "} {t.goCategories}

    {ungrouped.map((r) => (
  • {r.path} {formatMoney(r.amountMinor)}
  • ))}
) : null}
{KAKEIBO_GROUPS.map((g) => ( ))}
{bank.length ? (

{k.bankCost}

    {bank.map((r) => (
  • {r.path} {formatMoney(r.amountMinor)}
  • ))}
) : null}
); }