import React, { useState } from 'react';
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
import { Download } from 'lucide-react';
const FIRECalculator = () => {
const [inputs, setInputs] = useState({
currentAge: 30,
annualExpenses: 50000,
currentSavings: 100000,
monthlySavings: 2000,
withdrawalRate: 4,
returnRate: 7,
inflationRate: 2.5
});
// Calculate FIRE Number
const calculateFIRENumber = () => {
return (inputs.annualExpenses * (100 / inputs.withdrawalRate));
};
// Calculate Years to FIRE
const calculateYearsToFIRE = () => {
const fireNumber = calculateFIRENumber();
const monthlyReturn = inputs.returnRate / 100 / 12;
let currentSavings = inputs.currentSavings;
let months = 0;
while (currentSavings < fireNumber && months < 600) { // 50 years max
currentSavings = currentSavings * (1 + monthlyReturn) + inputs.monthlySavings;
months++;
}
return (months / 12).toFixed(1);
};
const generateSpreadsheet = () => {
// TODO: Implement Google Sheets API integration
console.log("Generating spreadsheet template...");
};
return (
<Card className="w-full max-w-2xl">
<CardHeader>
<CardTitle>FIRE Calculator & Template Generator</CardTitle>
</CardHeader>
<CardContent>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div className="space-y-4">
<div>
<label className="block text-sm font-medium">Current Age</label>
<input
type="number"
value={inputs.currentAge}
onChange={(e) => setInputs({...inputs, currentAge: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0"
max="100"
/>
</div>
<div>
<label className="block text-sm font-medium">Annual Expenses</label>
<input
type="number"
value={inputs.annualExpenses}
onChange={(e) => setInputs({...inputs, annualExpenses: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0"
/>
</div>
<div>
<label className="block text-sm font-medium">Current Savings</label>
<input
type="number"
value={inputs.currentSavings}
onChange={(e) => setInputs({...inputs, currentSavings: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0"
/>
</div>
<div>
<label className="block text-sm font-medium">Monthly Savings</label>
<input
type="number"
value={inputs.monthlySavings}
onChange={(e) => setInputs({...inputs, monthlySavings: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0"
/>
</div>
</div>
<div className="space-y-4">
<div>
<label className="block text-sm font-medium">Withdrawal Rate (%)</label>
<input
type="number"
value={inputs.withdrawalRate}
onChange={(e) => setInputs({...inputs, withdrawalRate: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0.1"
max="10"
step="0.1"
/>
</div>
<div>
<label className="block text-sm font-medium">Expected Return Rate (%)</label>
<input
type="number"
value={inputs.returnRate}
onChange={(e) => setInputs({...inputs, returnRate: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0"
max="15"
step="0.1"
/>
</div>
<div>
<label className="block text-sm font-medium">Inflation Rate (%)</label>
<input
type="number"
value={inputs.inflationRate}
onChange={(e) => setInputs({...inputs, inflationRate: Number(e.target.value)})}
className="w-full p-2 border rounded"
min="0"
max="10"
step="0.1"
/>
</div>
</div>
</div>
<div className="mt-8 p-4 bg-gray-50 rounded-lg">
<h3 className="font-semibold mb-4">Results</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<p className="text-sm text-gray-600">FIRE Number</p>
<p className="text-2xl font-bold">${calculateFIRENumber().toLocaleString()}</p>
</div>
<div>
<p className="text-sm text-gray-600">Years to FIRE</p>
<p className="text-2xl font-bold">{calculateYearsToFIRE()} years</p>
</div>
</div>
</div>
<button
onClick={generateSpreadsheet}
className="mt-6 w-full bg-indigo-600 text-white p-3 rounded-lg flex items-center justify-center hover:bg-indigo-700"
>
<Download className="w-5 h-5 mr-2" />
Generate Spreadsheet Template
</button>
</CardContent>
</Card>
);
};
export default FIRECalculator;