class LoginController:
    def __init__(self):
        self.controller = UserController()

    def login(self, username, password):
        user = self.controller.find(username)

        if not user:
            raise Exception('Usuario no existe')

        if not user.password == self.controller.encrypt_password(password):
            raise Exception('Contraseña incorrecta')

        return user
class AdminWindow:
    def __init__(self):
        self.selected_user = ''
        self.controller = UserController()

        self.builder = Gtk.Builder()
        self.builder.add_from_file('admin_window.glade')
        self.builder.connect_signals(self)

        self.liststore = self.builder.get_object('liststore_users')
        self.window = self.builder.get_object('window')
        self.window.show()
        self.__build()

    def __build(self):
        for user in self.controller.get_users():
            self.liststore.append([user.username, user.name, user.role])

    def __update(self):
        self.liststore.clear()
        for user in self.controller.get_users():
            self.liststore.append([user.username, user.name, user.role])

    def on_create_user(self, widget):
        UserWindow().run()
        self.__update()

    def on_edit_user(self, widget):
        user = self.controller.find(self.selected_user)
        UserWindow(user).run()
        self.__update()

    def on_delete_user(self, widget):
        dialog = Gtk.MessageDialog(transient_for=self.window,
                                   flags=0,
                                   message_type=Gtk.MessageType.WARNING,
                                   buttons=Gtk.ButtonsType.YES_NO,
                                   text='¿Desea eliminar este usuario?')
        result = dialog.run()
        dialog.destroy()
        if result == -8:
            user = self.controller.find(self.selected_user)
            self.controller.delete(user)
            self.__update()

    def on_cursor_changed(self, widget):
        if self.selected_user == '':
            self.builder.get_object('button_edit_user').set_sensitive(True)
            self.builder.get_object('button_delete_user').set_sensitive(True)

        try:
            model, tree_iter = widget.get_selection().get_selected()
            self.selected_user = model.get_value(tree_iter, 0)
        except:
            self.selected_user = ''
            self.builder.get_object('button_edit_user').set_sensitive(False)
            self.builder.get_object('button_delete_user').set_sensitive(False)

    def on_destroy(self, *args):
        Gtk.main_quit()

    def main(self):
        Gtk.main()