import { useState, useEffect } from 'react'; export default function Calculator() { const [current, setCurrent] = useState('0'); const [previous, setPrevious] = useState(null); const [operation, setOperation] = useState(null); const [overwrite, setOverwrite] = useState(false); // Handle number input const appendNumber = (number) => { if (overwrite) { setCurrent(number.toString()); setOverwrite(false); } else { if (number === '0' && current === '0') return; if (current === '0' && number !== '.') { setCurrent(number.toString()); } else { setCurrent(current + number); } } }; // Handle decimal point const appendDecimal = () => { if (overwrite) { setCurrent('0.'); setOverwrite(false); return; } if (current.includes('.')) return; setCurrent(current + '.'); }; // Clear all const clear = () => { setCurrent('0'); setPrevious(null); setOperation(null); setOverwrite(false); }; // Delete last digit const deleteLast = () => { if (overwrite) { setCurrent('0'); setOverwrite(false); return; } if (current.length === 1) { setCurrent('0'); return; } setCurrent(current.slice(0, -1)); }; // Choose operation const chooseOperation = (op) => { if (current === '') return; if (previous !== null) { compute(); } setOperation(op); setPrevious(current); setCurrent(''); }; // Compute result const compute = () => { let computation; const prev = parseFloat(previous); const curr = parseFloat(current); if (isNaN(prev) || isNaN(curr)) return; switch (operation) { case '+': computation = prev + curr; break; case '-': computation = prev - curr; break; case '*': computation = prev * curr; break; case '/': computation = prev / curr; break; default: return; } setCurrent(computation.toString()); setOperation(null); setPrevious(null); setOverwrite(true); }; // Button Helper const Button = ({ label, onClick, className = '', variant = 'default' }) => { let bgClass = 'bg-gray-700 hover:bg-gray-600 text-white'; if (variant === 'operator') bgClass = 'bg-orange-500 hover:bg-orange-400 text-white'; if (variant === 'action') bgClass = 'bg-gray-500 hover:bg-gray-400 text-white'; if (variant === 'danger') bgClass = 'bg-red-500/80 hover:bg-red-400 text-white'; return ( ); }; return (