const display = document.getElementById('display');
const operators = ['+', '-', '*', '/', '%'];

// Function to append characters to the display with bug fixes
function appendCharacter(char) {
    const currentValue = display.value;
    const lastChar = currentValue[currentValue.length - 1];

    if (currentValue === 'Error') {
        display.value = char;
        return;
    }
    
    if (operators.includes(char) && operators.includes(lastChar)) {
        if ((lastChar === '*' || lastChar === '/') && char === '-') {
            display.value += char;
        } else {
            display.value = currentValue.slice(0, -1) + char;
        }
        return;
    }

    if (char === '.') {
        const numberSegments = currentValue.split(/[\+\-\*\/%]/);
        if (numberSegments[numberSegments.length - 1].includes('.')) {
            return;
        }
    }
    
    if (currentValue === '0' && char !== '.') {
        display.value = char;
    } else {
        display.value += char;
    }
}

// Function to clear the entire display
function clearDisplay() {
    display.value = '0';
}

// Function to delete the last character
function deleteLast() {
    if (display.value === 'Error' || display.value.length === 1) {
        display.value = '0';
    } else {
        display.value = display.value.slice(0, -1);
    }
}

// Function to calculate the result with improved logic
function calculateResult() {
    try {
        let expression = display.value.replace(/×/g, '*').replace(/÷/g, '/');
        expression = expression.replace(/(\d*\.?\d+)%/g, '($1/100)');
        
        const lastChar = expression[expression.length - 1];
        if (operators.includes(lastChar) || (lastChar === '-' && (expression[expression.length-2] === '*' || expression[expression.length-2] === '/'))) {
            expression = expression.slice(0, -1);
        }

        const result = eval(expression);

        if (!isFinite(result)) {
            display.value = 'Error';
        } else {
            display.value = String(parseFloat(result.toPrecision(12)));
        }
    } catch (error) {
        display.value = 'Error';
    }
}

// Add keyboard support for a better user experience
document.addEventListener('keydown', (event) => {
    event.preventDefault(); 
    const key = event.key;
    if (/[0-9]/.test(key) || key === '.') {
        appendCharacter(key);
    } else if (key === '+' || key === '-' || key === '*' || key === '/' || key === '%') {
        appendCharacter(key);
    } else if (key === 'Enter' || key === '=') {
        calculateResult();
    } else if (key === 'Backspace') {
        deleteLast();
    } else if (key === 'Escape' || key.toLowerCase() === 'c') {
        clearDisplay();
    }
});
