import { formatCurrency, formatPeriodLabel } from "@/lib/utils" import { DetailedTimeSeriesData } from "@/models/stats" interface ChartTooltipProps { data: DetailedTimeSeriesData | null defaultCurrency: string position: { x: number; y: number } visible: boolean containerWidth?: number } export function IncomeExpenceGraphTooltip({ data, defaultCurrency, position, visible }: ChartTooltipProps) { if (!visible || !data) { return null } const incomeCategories = data.categories.filter((cat) => cat.income > 0) const expenseCategories = data.categories.filter((cat) => cat.expenses > 0) const tooltipWidth = 320 // estimated max width const spaceToRight = window.innerWidth - position.x const showToRight = spaceToRight >= tooltipWidth + 20 // 20px margin const horizontalOffset = showToRight ? 15 : -15 // distance from cursor const horizontalTransform = showToRight ? "0%" : "-100%" return (
{/* Header */}

{formatPeriodLabel(data.period, data.date)}

{data.totalTransactions} transaction{data.totalTransactions !== 1 ? "s" : ""}

{/* Totals */}
{data.income > 0 && (
Total Income: {formatCurrency(data.income, defaultCurrency)}
)} {data.expenses > 0 && (
Total Expenses: {formatCurrency(data.expenses, defaultCurrency)}
)}
{/* Income Categories */} {incomeCategories.length > 0 && (

Income by Category

{incomeCategories.map((category) => (
{category.name}
{formatCurrency(category.income, defaultCurrency)}
))}
)} {/* Expense Categories */} {expenseCategories.length > 0 && (

Expenses by Category

{expenseCategories.map((category) => (
{category.name}
{formatCurrency(category.expenses, defaultCurrency)}
))}
)}
) }