import React, { useState } from 'react'; import { motion } from 'framer-motion'; import { Wallet, TrendingDown, PiggyBank, AlertTriangle, Pencil, Check, Plus, ArrowUpRight, } from 'lucide-react'; import ProgressBar from '../ui/ProgressBar'; import Button from '../ui/Button'; import { formatCurrency } from '../../utils/formatCurrency'; const BudgetOverview = ({ totalBudget = 0, totalSpent = 0, remainingBudget = 0, percentUsed = 0, isOverBudget = false, currency = 'IDR', onUpdateTotalBudget, onOpenAddExpense, }) => { const [isEditingBudget, setIsEditingBudget] = useState(false); const [budgetInput, setBudgetInput] = useState(totalBudget.toString()); const handleSaveBudget = (e) => { e.preventDefault(); const val = Number(budgetInput) || 0; onUpdateTotalBudget(val); setIsEditingBudget(false); }; const getRemainingStatus = () => { if (isOverBudget) { return { text: 'Over Budget!', color: 'var(--color-danger)', bg: 'var(--color-danger-bg)' }; } if (percentUsed >= 80) { return { text: 'Mendekati Batas', color: 'var(--color-warning)', bg: 'var(--color-warning-bg)' }; } return { text: 'Aman & Terkendali', color: 'var(--color-success)', bg: 'var(--color-success-bg)' }; }; const remainingStatus = getRemainingStatus(); return (
{/* 3 Overview Stat Cards Grid */}
{/* Card 1: Total Budget */}
Target Total Budget
{isEditingBudget ? (
setBudgetInput(e.target.value)} autoFocus style={{ padding: 'var(--space-2) var(--space-3)', fontSize: 'var(--text-sm)' }} />
) : (
{formatCurrency(totalBudget, currency)}
)}
Alokasi dana keseluruhan trip
{/* Card 2: Total Spent */}
Total Terpakai
{percentUsed}% Terpakai
{formatCurrency(totalSpent, currency)}
Pengeluaran yang tercatat saat ini
{/* Card 3: Remaining Budget */}
Sisa Budget
{remainingStatus.text}
{formatCurrency(remainingBudget, currency)}
{isOverBudget ? 'Melebihi alokasi anggaran!' : 'Sisa saldo yang dapat dibelanjakan'}
{/* Progress & Alert Bar */}
Persentase Anggaran Terpakai
= 80 ? 'warning' : 'primary'} /> {/* Warning Banner if Over Budget */} {isOverBudget && ( Perhatian: Pengeluaran Anda melebihi target anggaran sebesar{' '} {formatCurrency(Math.abs(remainingBudget), currency)}. Evaluasi kembali pos belanja Anda. )}
); }; export default BudgetOverview;