class MDIWindow(QMainWindow):
    AutoOriginal = AutoOriginal("white")
    caretaker = Caretaker(AutoOriginal)
    cc = 0
    ci = 0
    cn = 0
    pos = 0
    root = Tk()
    root.title('canvas')
    count = 0
    countProxy = 0
    countState = 0
    countBuilder = 0
    canvas = Canvas(width=220, height=110, bg='white')
    canvas.pack(side=TOP, expand=True, fill=BOTH)

    def __init__(self):
        super().__init__()

        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)

        bar = self.menuBar()
        file = bar.addMenu("Patrones")
        file.addAction("Patron Memento")

        bel = QLabel(self)
        imagen = QPixmap('./imagenes/logoUniversidad.png')
        bel.setPixmap(imagen)
        bel.setGeometry(400, 20, 400, 400)
        self.mdi.setStyleSheet("background-color: rgb(240, 240, 240);")
        file.triggered[QAction].connect(self.WindowTrig)
        self.setWindowTitle("Pantalla Principal")

    def WindowTrig(self, p):

        #=====================================================================================================================================================================

        if p.text() == "Patron Memento":
            subState = QMdiSubWindow()
            subState.resize(400, 400)

            widgetState = QWidget()

            self.layoutState = QGridLayout(widgetState)
            self.layoutState.setContentsMargins(0, 0, 0, 0)
            self.layoutState.setObjectName("gridState")

            labelEstado = QLabel()
            labelEstado.setText("Memento")
            self.layoutState.addWidget(labelEstado, 0, 1, 1, 1)

            self.comboEstado = QComboBox()
            self.comboEstado.addItem("blue")
            self.comboEstado.addItem("yellow")
            self.comboEstado.addItem("red")
            self.comboEstado.addItem("green")
            self.layoutState.addWidget(self.comboEstado, 0, 2, 1, 1)

            btnanterior = QPushButton('Color Anterior')
            self.layoutState.addWidget(btnanterior, 1, 2, 1, 1)
            btnanterior.clicked.connect(self.button_anterior)

            btnnext = QPushButton('Color Siguiente')
            self.layoutState.addWidget(btnnext, 1, 4, 1, 1)
            btnnext.clicked.connect(self.button_next)

            btnver = QPushButton('Ver')
            self.layoutState.addWidget(btnver, 1, 6, 1, 1)
            btnver.clicked.connect(self.button_ver)

            subState.setWidget(widgetState)
            subState.setWindowTitle("Patrón Memento")
            self.mdi.addSubWindow(subState)
            subState.show()
################################

    def button_anterior(self):
        #self.ci = self.ci+1
        #self.cn = 0
        self.pos = self.pos - 1
        print(self.ci)

        if self.cc == 0:
            print('No existe un anterior')
        else:

            if (self.pos) >= 0:
                color = self.caretaker.undo(self.pos)

                self.canvas.create_rectangle(10,
                                             20,
                                             130,
                                             80,
                                             width=1,
                                             fill=color)
                self.canvas.create_rectangle(40,
                                             10,
                                             100,
                                             80,
                                             width=1,
                                             fill=color)
                self.canvas.create_rectangle(90,
                                             20,
                                             70,
                                             40,
                                             width=1,
                                             fill="white")
                #self.canvas.create_oval(10, 10, 30, 30, width=5, fill='black')
                #self.canvas.create_oval(10, 90, 30, 60, width=1, fill='black')
                self.root.mainloop()

            else:
                print('No se puede retroceder más ')

################################

    def button_next(self):
        #self.cn += 1
        #self.ci = 0

        print(self.pos)

        #if self.pos != self.cc:

        if self.pos >= self.cc:

            print('No existe uno siguiente')
        else:

            color = self.caretaker.siguiente(self.pos)
            self.canvas.create_rectangle(10, 20, 130, 80, width=1, fill=color)
            self.canvas.create_rectangle(40, 10, 100, 80, width=1, fill=color)
            self.canvas.create_rectangle(90, 20, 70, 40, width=1, fill="white")
            #self.canvas.create_oval(10, 10, 30, 30, width=5, fill='black')
            #self.canvas.create_oval(10, 90, 30, 60, width=1, fill='black')
            self.pos = self.pos + 1
            self.root.mainloop()


#############################

    def button_ver(self):

        self.ci = 0
        self.cn = 0
        estado = self.comboEstado.currentText()
        self.cc = self.cc + 1
        self.pos = self.cc

        if (estado == "blue"):
            self.caretaker.backup()
            self.AutoOriginal.cambiarColor("blue")

            self.canvas.create_rectangle(10, 20, 130, 80, width=1, fill="blue")
            self.canvas.create_rectangle(40, 10, 100, 80, width=1, fill="blue")

        if (estado == "yellow"):
            self.caretaker.backup()
            self.AutoOriginal.cambiarColor("yellow")
            self.canvas.create_rectangle(10,
                                         20,
                                         130,
                                         80,
                                         width=1,
                                         fill="yellow")
            self.canvas.create_rectangle(40,
                                         10,
                                         100,
                                         80,
                                         width=1,
                                         fill="yellow")

        if (estado == "red"):
            self.caretaker.backup()
            self.AutoOriginal.cambiarColor("red")
            self.canvas.create_rectangle(10, 20, 130, 80, width=1, fill="red")
            self.canvas.create_rectangle(40, 10, 100, 80, width=1, fill="red")

        if (estado == "green"):
            self.caretaker.backup()
            self.AutoOriginal.cambiarColor("green")
            self.canvas.create_rectangle(10,
                                         20,
                                         130,
                                         80,
                                         width=1,
                                         fill="green")
            self.canvas.create_rectangle(40,
                                         10,
                                         100,
                                         80,
                                         width=1,
                                         fill="green")

        self.canvas.create_rectangle(90, 20, 70, 40, width=1, fill="white")
        self.canvas.create_oval(20, 80, 40, 100, width=5, fill="black")
        self.canvas.create_oval(100, 80, 80, 100, width=1, fill="black")
        self.root.mainloop()