import tkinter as tk
from tkinter import scrolledtext, messagebox
import math
import re
import webbrowser

class HesapMakinesiApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Hesap Makinesi")
        self.root.geometry("500x450")
        self.root.resizable(False, False)  # Pencere boyutlandırılmasını kısıtla
        self.root.attributes("-topmost", True)  # Pencere diğer pencerelerin üzerinde gözüksün
        
        self.ans = None  # Son sonucu saklamak için
        self.history = []  # Eski kayıtları saklamak için

        self.output_area = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=60, height=15)
        self.output_area.pack(pady=10)

        self.input_entry = tk.Entry(root, width=60)
        self.input_entry.pack(pady=10)
        self.input_entry.bind('<Return>', self.evaluate_expression)
        
        self.eval_button = tk.Button(root, text="Hesapla", command=self.evaluate_expression)
        self.eval_button.pack(pady=5)

        self.about_button = tk.Button(root, text="Hakkında", command=self.show_about)
        self.about_button.pack(pady=5)

    def evaluate_expression(self, event=None):
        expression = self.input_entry.get()
        try:
            # İfadeyi güvenli bir şekilde değerlendir, ans değişkenini dahil et
            local_vars = {"math": math, "ans": self.ans}
            exec(f"result = {expression}", {"__builtins__": None}, local_vars)
            result = local_vars["result"]
            self.ans = result  # Sonuç ile ans güncelle
            decimal_places = self.get_decimal_places(expression)
            formatted_result = f"{result:.{decimal_places}f}" if isinstance(result, float) else result
            self.output_area.insert(tk.END, f"> {expression}\n{formatted_result}\n\n")
            self.history.append(f"> {expression}\n{formatted_result}\n")
        except Exception as e:
            self.output_area.insert(tk.END, f"Hata: {e}\n\n")
            self.history.append(f"> {expression}\nHata: {e}\n")
        self.input_entry.delete(0, tk.END)

    def get_decimal_places(self, expression):
        # İfadede geçen en fazla ondalık basamak sayısını belirle
        decimal_matches = re.findall(r'\d+\.(\d+)', expression)
        if decimal_matches:
            return max(len(match) for match in decimal_matches)
        return 0

    def show_about(self):
        webbrowser.open("https://www.ettunc.com")

if __name__ == "__main__":
    root = tk.Tk()
    app = HesapMakinesiApp(root)
    root.mainloop()
