import { useState } from 'react'; import { Leaf } from 'lucide-react'; import type { CarbonCalculation, CurrencyCode } from '../types'; import { currencies, formatCurrency } from '../utils/currencies'; import { CurrencySelect } from './CurrencySelect'; import { calculateCarbonFromDistance } from '../utils/carbonCalculator'; interface Props { calculation: CarbonCalculation; onOffsetClick?: (tons: number) => void; } export function CarbonOffset({ calculation, onOffsetClick }: Props) { const [calculationType, setCalculationType] = useState<'distance' | 'fuel'>('distance'); const [annualDistance, setAnnualDistance] = useState(''); const [fuelAmount, setFuelAmount] = useState(''); const [fuelUnit, setFuelUnit] = useState<'liters' | 'gallons'>('liters'); const [currency, setCurrency] = useState('USD'); const [offsetPercentage, setOffsetPercentage] = useState(100); const [customPercentage, setCustomPercentage] = useState(''); const selectedCurrency = currencies[currency]; const handleCustomPercentageChange = (e: React.ChangeEvent) => { const value = e.target.value; if (value === '' || (Number(value) >= 0 && Number(value) <= 100)) { setCustomPercentage(value); if (value !== '') { setOffsetPercentage(Number(value)); } } }; const handlePresetPercentage = (percentage: number) => { setOffsetPercentage(percentage); setCustomPercentage(''); }; const calculateOffsetAmount = (emissions: number, percentage: number) => { return (emissions * percentage) / 100; }; const getEmissions = () => { if (calculationType === 'distance' && annualDistance) { return calculateCarbonFromDistance(Number(annualDistance)); } return calculation.yearlyEmissions; }; const emissions = getEmissions(); const offsetAmount = calculateOffsetAmount(emissions, offsetPercentage); const offsetCost = (offsetAmount * 20); // $20 per ton return (

Annual Carbon Offset Summary

{calculationType === 'distance' && (
setAnnualDistance(e.target.value)} placeholder="Enter annual distance" className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-green-500 focus:ring focus:ring-green-200" />
)} {calculationType === 'fuel' && (
setFuelAmount(e.target.value)} className="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-green-500 focus:ring focus:ring-green-200" required />
)}
{[100, 50, 25].map((percent) => ( ))}
%

Selected Offset Amount

{offsetAmount.toFixed(2)} tons CO₂

{offsetPercentage}% of {emissions.toFixed(2)} tons

Estimated Offset Cost

{formatCurrency(offsetCost, selectedCurrency)}

); }