"use client"; import { ArrowRight } from "lucide-react"; import { useTranslation } from "react-i18next"; import type { SettlementBillRow } from "@/api/admin-agent-settlement"; import { AdminStatusBadge } from "@/components/admin/admin-status-badge"; import { cn } from "@/lib/utils"; import { formatDashboardMoneyMinor } from "@/modules/dashboard/use-dashboard-analytics"; import { buildBillAmountBreakdown, describeBillPaymentDirection, type BillBreakdownLine, type DownlineShareBreakdown, } from "@/modules/settlement/settlement-bill-display"; import { formatSignedSettlementMoney, signedSettlementMoneyClass, } from "@/modules/settlement/settlement-signed-money"; import { settlementBillStatusLabel, settlementBillTypeLabel, } from "@/modules/settlement/settlement-status-label"; type SettlementBillSummaryHeaderProps = { bill: SettlementBillRow; currencyCode: string; }; export function SettlementBillSummaryHeader({ bill, currencyCode, }: SettlementBillSummaryHeaderProps): React.ReactElement { const { t } = useTranslation(["settlementCenter", "agents"]); const direction = describeBillPaymentDirection(bill, t); const unpaid = bill.unpaid_amount > 0; return (
{settlementBillStatusLabel(bill.status, t)} {settlementBillTypeLabel(bill.bill_type, t)}
{t("settlementCenter:billDisplay.payerLabel", { defaultValue: "付款方" })} {direction.payer} {t("settlementCenter:billDisplay.payeeLabel", { defaultValue: "收款方" })} {direction.payee}

{t("settlementCenter:billDisplay.settlementAmount", { defaultValue: "结算金额" })}

{formatDashboardMoneyMinor(direction.amount, currencyCode)}

{t("settlementCenter:columns.paid", { defaultValue: "已收付" })}

{formatDashboardMoneyMinor(bill.paid_amount ?? 0, currencyCode)}

{t("settlementCenter:columns.unpaid", { defaultValue: "未结" })}

{formatDashboardMoneyMinor(bill.unpaid_amount, currencyCode)}

{unpaid ? (

{bill.status === "pending_confirm" ? t("settlementCenter:billDisplay.unpaidPendingConfirm", { defaultValue: "确认账单后可登记收付", }) : t("settlementCenter:billDisplay.unpaidAwaitingPayment", { defaultValue: "请登记线下收付", })}

) : (

{t("settlementCenter:billDisplay.fullySettled", { defaultValue: "本期已结清" })}

)}
); } type SettlementBillAmountBreakdownProps = { bill: SettlementBillRow; currencyCode: string; downlineShares?: DownlineShareBreakdown | null; }; function BreakdownAmountLine({ line, currencyCode, nested = false, }: { line: BillBreakdownLine; currencyCode: string; nested?: boolean; }): React.ReactElement { const prefix = line.kind === "subtract" ? "−" : line.kind === "add" && line.key !== "gross" ? "+" : line.kind === "subtotal" || line.kind === "total" ? "=" : ""; return ( <>
{prefix ? {prefix} : null} {line.label} {line.hint ? (

{line.hint}

) : null}
{formatSignedSettlementMoney(line.signedAmount, currencyCode)}
{line.children?.map((child) => ( ))} ); } export function SettlementBillAmountBreakdown({ bill, currencyCode, downlineShares = null, }: SettlementBillAmountBreakdownProps): React.ReactElement | null { const { t } = useTranslation(["settlementCenter", "agents"]); const lines = buildBillAmountBreakdown(bill, t, downlineShares); if (lines.length === 0) { return null; } const breakdownIntro = bill.bill_type === "player" ? t("settlementCenter:billDisplay.playerBreakdownIntro", { defaultValue: "玩家只与直属代理结算,净额 = 输赢 − 回水。", }) : bill.bill_type === "agent" ? t("settlementCenter:billDisplay.agentBreakdownIntro", { defaultValue: "代理只与直属上级结算,净额 = 团队净额 − 下级占成 − 本级占成。", }) : null; return (

{t("settlementCenter:billDisplay.howAmountWorks", { defaultValue: "结算明细" })}

{breakdownIntro ? (

{breakdownIntro}

) : null}
{lines.map((line) => ( ))}
); }