class MainWindow(QtGui.QMainWindow):

    def __init__(self, tipo=None, rut=None):
        'Constructor de la clase'
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()
        self.importarDatos()
        self.setSignals()

    def setSignals(self):
        'Enventos de los elementos de la ventana principal'
        self.ui.button_buscar.clicked.connect(self.buscarRegistro)
        self.ui.button_nuevo.clicked.connect(self.nuevoRegistro)
        self.ui.cbox_comuna.currentIndexChanged.connect(self.seleccionaComuna)
        self.ui.actionA_adir_Usuario.triggered.connect(self.reg_usuario)
        self.ui.actionEstablecimiento.triggered.connect(self.agregarEstablecimiento)
        self.ui.actionComuna.triggered.connect(self.agregarComuna)
        self.ui.actionInf_1er_Semestre.triggered.connect(self.nuevoInforme)
        self.ui.cbox_anho1.currentIndexChanged.connect(self.currentIndexChanged2)
        self.ui.button_buscar_registro.clicked.connect(self.cargarRegistro)
        self.ui.actionSalir.triggered.connect(self.salir)
        self.ui.actionModificar_Comuna.triggered.connect(self.mod_Comuna)
        self.ui.actionModificar_Establecimiento.triggered.connect(self.mod_Establecimiento)

    def salir(self):
        self.close()
    
    def errorMessage(self, message):
        """Función que despliega un mensaje de error.
        @param message"""
        QtGui.QMessageBox.warning(
            self,
            u"ERROR!",
            message)

    def nuevoRegistro(self):
        self.main = nuevoRegistroWindow(self.ui.cbox_establecimiento.currentText(), 
                                        self.ui.cbox_mes2.currentText(),
                                        self.ui.cbox_anho2.currentText())
        self.main.show()

    def buscarRegistro(self):
        'Método para buscar los registros de la comuna y establecimiento seleccionado'
        if(self.ui.cbox_comuna.currentIndex() is not 0):
            self.ui.groupBox_5.setEnabled(True)
            self.ui.groupBox_6.setEnabled(True)
            self.ui.groupBox_2.setEnabled(True)
            self.ui.texto_comuna_label.setText(self.ui.cbox_comuna.currentText())
            self.ui.texto_establecimiento_label.setText(self.ui.cbox_establecimiento.currentText())
            self.cargaRegistros()
            self.datosMesAnho()
        else:
            self.errorMessage(u"Comuna no seleccionada")

    def cargarRegistro(self):
        if(self.ui.cbox_anho1.currentIndex() is not 0):
            self.main = registroCargadoWindow(self.ui.cbox_establecimiento.currentText(),
                                              self.ui.cbox_mes1.currentText(),
                                              self.ui.cbox_anho1.currentText())
            self.main.show()
        else:
            self.errorMessage(u"Año no seleccionado")

    def cargaRegistros(self):
        lista_anios = list()
        idEstablecimiento = controller.obtenerIdEstablecimiento(self.ui.cbox_establecimiento.currentText())
        registros = controller.obtenerAnhos(idEstablecimiento)
        for i in range(len(registros)):
            lista_anios.append(registros[0].anho)
        lista_anios_unicos = list(set(lista_anios))
        if not registros:
            self.ui.cbox_anho1.clear()
            self.ui.cbox_anho1.addItem("--------")
        else:
            self.ui.cbox_anho1.clear()
            self.ui.cbox_anho1.addItem("--------")
            for i, registro in enumerate(lista_anios_unicos):
                self.ui.cbox_anho1.addItem(str(registro), i)

    def datosMesAnho(self):
        self.ui.cbox_mes2.clear()
        self.ui.cbox_anho2.clear()
        meses = ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"]
        for i in meses:
            self.ui.cbox_mes2.addItem(i)
        for i in range(1990, datetime.date.today().year+1):
            self.ui.cbox_anho2.addItem(str(i))

    def seleccionaComuna(self, index):
        if(index is not 0):
            idComuna = controller.obtenerIdComuna(self.ui.cbox_comuna.currentText())
            establecimientos = controller.obtenerEstablecimientos(idComuna)
            self.ui.cbox_establecimiento.clear()
            for i, establecimiento in enumerate(establecimientos):
                self.ui.cbox_establecimiento.addItem(establecimiento.nombre, i)
        else:
            self.ui.cbox_establecimiento.clear()
            self.ui.cbox_establecimiento.addItem("--------")

    def currentIndexChanged2(self, index):
        if(index != 0 and index != -1):
            idEstablecimiento = controller.obtenerIdEstablecimiento(self.ui.cbox_establecimiento.currentText())
            registros = controller.obtenerMeses(idEstablecimiento, self.ui.cbox_anho1.currentText())
            self.ui.cbox_mes1.clear()
            for i, registro in enumerate(registros):
                self.ui.cbox_mes1.addItem(registro.mes, i)
        else:
            self.ui.cbox_mes1.clear()
            self.ui.cbox_mes1.addItem("--------")      

    def reg_usuario(self):
        self.regUsuario = Form_usuario()
        self.regUsuario.exec_()

    def agregarEstablecimiento(self):
        self.regEstablecimiento = Form_establecimiento()
        self.regEstablecimiento.exec_()

    def agregarComuna(self):
        self.regComuna = Form_comuna()
        self.regComuna.exec_()

    def mod_Comuna(self):
        self.modComuna = Modificar_comuna()
        self.modComuna.exec_()

    def mod_Establecimiento(self):
        self.modEstablecimiento = Modificar_establecimiento()
        self.modEstablecimiento.exec_()

    def importarDatos(self):
        comunas = controller.obtenerComunas()
        self.ui.cbox_comuna.addItem("--------")
        for i, comuna in enumerate(comunas):
            self.ui.cbox_comuna.addItem(comuna.nombre, i)
        self.ui.cbox_establecimiento.addItem("--------")


    def nuevoInforme(self):
        self.generarInforme = FormInformeSemestral()
        self.generarInforme.show()
 def mod_Establecimiento(self):
     self.modEstablecimiento = Modificar_establecimiento()
     self.modEstablecimiento.exec_()