class ManagerM(QWidget, Ui_Qmanager):
    def __init__(self, obj):
        super(ManagerM, self).__init__()
        self.setupUi(self)
        self.o = obj
        self.choose_admin = -1
        self.choose_hotel = -1
        self.initUI()

    def initUI(self):
        self.btnin_admin.clicked.connect(self.in_admin)
        self.btnadd_admin.clicked.connect(self.add_admin)
        self.btnadd_hostel.clicked.connect(self.add_hotel)
        self.btnaapply.clicked.connect(self.apply)
        self.btnblock.clicked.connect(self.block)
        self.change()

    def apply(self):
        if self.adress_sort.isChecked():
            self.hotels = HotelModel(db.get_connection()).get_all()
            self.hotels.sort(
                key=lambda x: str(x[2]) + str(x[3]) + str(x[4]) + str(x[5]))
            self.hotel_session.setText('\n'.join(
                ['[x] ' + str(x[3]) for x in self.hotels]))
        elif self.nroom_sort.isChecked():
            self.hotels = HotelModel(db.get_connection()).get_all()
            self.hotels.sort(key=lambda x: x[7])
            self.hotel_session.setText('\n'.join(
                ['[x] ' + str(x[3]) for x in self.hotels]))
        elif self.time.isChecked():
            self.hotels = HotelModel(db.get_connection()).get_all()
            self.hotels.sort(key=lambda x: x[0])
            self.hotel_session.setText('\n'.join(
                ['[x] ' + str(x[3]) for x in self.hotels]))

    def block(self):
        UserModel(db.get_connection()).block(self.choose_admin)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            x, y = event.x(), event.y()

            x -= 200
            y -= 70

            print(x, y)
            if y < 170:
                y //= 18

                self.hotels = HotelModel(db.get_connection()).get_all()
                if x <= 20:
                    self.delete_hotel(self.hotels[y - 1][0])
                else:
                    self.choose_hotel = self.hotels[y - 1][0]
            else:
                y //= 18
                y -= 9
                self.admins = UserModel(db.get_connection()).get_all()
                if x <= 20:
                    print(y)
                    self.delete_admin(self.admins[y - 1][0])
                else:
                    self.choose_admin = self.admins[y - 1][0]

    def mouseDoubleClickEvent(self, event):
        x, y = event.x(), event.y()
        try:
            x -= 10
            y -= 60
            x //= 6
            y //= 18
            if x <= 290:
                self.admins = UserModel(db.get_connection()).get_all()
                self.edit_lodger(self.admins[y][0])
            else:
                self.hotels = HotelModel(db.get_connection()).get_all()
                self.edit_hotel(self.hotels[y][0])
        except Exception as e:
            self.change_status(e)

    def add_admin(self):
        self.w1 = Add_adminM(self.o, -1)
        self.w1.show()
        self.change()

    def delete_admin(self, id):
        self.admins = UserModel(db.get_connection())
        self.admins.delete(id)

    def in_admin(self):
        self.admin = UserModel(db.get_connection())
        lod = self.admin.get(self.choose_lodger)
        if lod[8] != -1:
            self.change_status("Этот администратор уже назначен")
        else:
            self.admin.check_in(self.choose_admin, self.choose_hotel)
            self.change()

    def out_admin(self):
        self.lodgers = UserModel(db.get_connection())
        self.lodgers.check_out(self.choose_lodger)
        self.change()

    def edit_hotel(self, y):
        self.w1 = Add_hostelM(self.o, y)
        self.w1.show()
        self.change()

    def add_hotel(self):
        self.w1 = Add_hostelM(self.o, -1)
        self.w1.show()

    def delete_hotel(self, id):
        self.hotel = HotelModel(db.get_connection())
        room = self.hotel.get(id)
        if room[4] != 0:
            self.change_status("В этом отеле живут")
        else:
            self.hotel.delete(id)
            self.change()

    def edit_admin(self, id):
        self.w1 = Add_adminM(self.o, self.choose_admin)
        self.w1.show()
        self.change()

    def change_status(self, text):
        self.status.clear()
        self.status.append(text)

    def change(self):
        self.hotels = HotelModel(db.get_connection()).get_all()
        self.hotel_session.setText('\n'.join(
            ['[x] ' + str(x[3]) for x in self.hotels]))
        self.admins = UserModel(db.get_connection()).get_all()
        #print(self.hotels)
        self.admin_session.setText('\n'.join([
            '[x] ' + x[1] + ' ' + str(x[7]) if x[7] else '[x] ' + x[1]
            for x in self.admins
        ]))