import pygame
import sas_pygame as sas


class TaschenechnerGUI:
    def __init__(self):
        self.lbAnzeige = sas.Label(10, 10, 230, 30, "", "white", True)
        self.bAC = sas.Button(10,50,50,50, "AC", "white")
        self.bVorzeichen = sas.Button(70,50,50,50, "±", "white")
        self.bProzent = sas.Button(130,50,50,50, "%",  "white")
        self.bGeteilt = sas.Button(190,50,50,50, "/",  "white") 
        self.b7 = sas.Button(10, 110, 50, 50, "7",  "white")
        self.b8 = sas.Button(70, 110, 50, 50, "8",  "white")
        self.b9 = sas.Button(130, 110, 50, 50, "9",  "white")
        self.bMal = sas.Button(190,110,50,50, "*",  "white") 
  
        self.b4 = sas.Button(10, 170, 50, 50, "4",  "white")
        self.b5 = sas.Button(70, 170, 50, 50, "5",  "white")
        self.b6 = sas.Button(130, 170, 50, 50, "6",  "white")
        self.bMinus = sas.Button(190,170,50,50, "-",  "white")
  
        self.b1 = sas.Button(10, 230, 50, 50, "1",  "white")
        self.b2 = sas.Button(70, 230, 50, 50, "2",  "white")
        self.b3 = sas.Button(130, 230, 50, 50, "3",  "white")
        self.bPlus = sas.Button(190,230,50,50, "+",  "white") 
  
        self.b0 = sas.Button(10, 290, 110, 50, "0", "white")
        self.bPunkt = sas.Button(130,290,50,50, ".", "white")
        self.bGleich = sas.Button(190,290,50,50, "=", "white")
        self.punktGesetzt = False
        self.neuEingabe = True
        self.tr = Taschenrechner()

    def b1Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("1")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"1");

    def b2Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("2")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"2");
            
    def b3Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("3")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"3");

    def b4Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("4")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"5");

    def b5Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("5")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"5");

    def b6Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("6")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"6");

    def b7Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("7")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"7");

    def b8Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("8")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"8");

    def b9Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("9")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"9");

    def b0Aktion(self):
         if self.neuEingabe:
            self.punktGesetzt = False
            self.lbAnzeige.set_text("0")
            self.neuEingabe=False;
         else:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+"0")

    def bPunktAktion(self):
          if not self.punktGesetzt:
             self.lbAnzeige.set_text(self.lbAnzeige.get_text()+".");
             self.punktGesetzt=True

    def bVorzeichenAktion(self):
          self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
          self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "VZ")
          self.lbAnzeige.set_text("" + str(self.ergebnis))

    def bProzentAktion(self):
          self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
          self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "%")
          self.lbAnzeige.set_text("" + str(self.ergebnis))

    def bPlusAktion(self):
        self.neuEingabe = True
        self.punktGesetzt = True
        self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
        self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "+")
        self.lbAnzeige.set_text("" + str(self.ergebnis))

    def bMinusAktion(self):
        self.neuEingabe = True
        self.punktGesetzt = True
        self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
        self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "-")
        self.lbAnzeige.set_text("" + str(self.ergebnis))
    
    def bMalAktion(self):
        self.neuEingabe = True
        self.punktGesetzt = True
        self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
        self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "*")
        self.lbAnzeige.set_text("" + str(self.ergebnis))

    def bGeteiltAktion(self):
        self.neuEingabe = True
        self.punktGesetzt = True
        self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
        self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "/")
        self.lbAnzeige.set_text("" + str(self.ergebnis))

    def bGleichAktion(self):
        self.neuEingabe = True
        self.punktGesetzt = True
        self.zahl = sas.Tools.stringToFloat(self.lbAnzeige.get_text())
        self.ergebnis = self.tr.bearbeiteEingabe(self.zahl, "=")
        self.lbAnzeige.set_text("" + str(self.ergebnis))   

    def bACAktion(self):
        self.neuEingabe = True
        self.punktGesetzt = False
        self.lbAnzeige.set_text("0")
        self.tr.setzeZurueck()

class Taschenrechner:
    
    def __init__(self):
       self.gemerkteZahl = 0.0
       self.gemerkterOperator = ""

    def berechneUnaer(self, zahl, op):
        if op == "VZ":
            zahl = -zahl
        else:
            zahl = zahl / 100
        return zahl;
    
    def berechne(self, zahl1, zahl2, op):
        ergebnis = 0
        if op == "+":
            ergebnis = zahl1 + zahl2
        elif op == "-":
            ergebnis = zahl1 - zahl2
        elif op == "*":
            ergebnis = zahl1 * zahl2
        elif op == "/":
            ergebnis = zahl1 / zahl2
        else:
            ergebnis = None
        return ergebnis
    
    def bearbeiteEingabe(self, pAnzeige, pRechenzeichen):
        if pRechenzeichen == "VZ" or pRechenzeichen == "%":
            self.gemerkteZahl= self.berechneUnaer(pAnzeige, pRechenzeichen)
        elif self.gemerkterOperator == "":
            self.gemerkteZahl = pAnzeige
            if pRechenzeichen != "=":
                self.gemerkterOperator = pRechenzeichen
        else:
            self.gemerkteZahl = self.berechne(self.gemerkteZahl, pAnzeige,self.gemerkterOperator)
            if pRechenzeichen != "=":
                self.gemerkterOperator = pRechenzeichen
            else:
                self.gemerkterOperator = ""
        return self.gemerkteZahl;
    
    def setzeZurueck(self):
      self.gemerkteZahl =0.0;
      self.gemerkterOperator = ""


def main():
    view = sas.createView(250, 350, "blue","Taschenrechner");
    trgui = TaschenechnerGUI()  
    while view.running:
        view.step()
        if trgui.b1.clicked():
            trgui.b1Aktion();
        if trgui.b2.clicked():
            trgui.b2Aktion();
        if trgui.b3.clicked():
            trgui.b3Aktion();
        if trgui.b4.clicked():
            trgui.b4Aktion();
        if trgui.b5.clicked():
            trgui.b5Aktion();
        if trgui.b6.clicked():
            trgui.b6Aktion();
        if trgui.b7.clicked():
            trgui.b7Aktion();
        if trgui.b8.clicked():
            trgui.b8Aktion();
        if trgui.b9.clicked():
            trgui.b9Aktion();
        if trgui.b0.clicked():
            trgui.b0Aktion();
        if trgui.bPunkt.clicked():
            trgui.bPunktAktion();
        if trgui.bVorzeichen.clicked():
            trgui.bVorzeichenAktion();
        if trgui.bProzent.clicked():
            trgui.bProzentAktion();
        if trgui.bPlus.clicked():
            trgui.bPlusAktion();
        if trgui.bMinus.clicked():
            trgui.bMinusAktion();
        if trgui.bMal.clicked():
            trgui.bMalAktion();
        if trgui.bGeteilt.clicked():
            trgui.bGeteiltAktion();
        if trgui.bGleich.clicked():
            trgui.bGleichAktion();
        if trgui.bAC.clicked():
            trgui.bACAktion();


    view.quit()
        

main()