class CategoriesWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.expense_radioButton.setChecked(True)
        self.categories_manager = Categories()
        self.load_categories()
        print(self.categories_manager)
        self.show()

        self.ui.add_pushButton.clicked.connect(self.add_button_click)
        self.ui.rename_pushButton.clicked.connect(self.rename_button_click)
        self.ui.delete_pushButton.clicked.connect(self.delete_button_click)
        self.ui.back_pushButton.clicked.connect(self.close)
        self.ui.expense_radioButton.toggled.connect(
            self.expense_radiobtn_active)
        self.ui.income_radioButton.toggled.connect(self.income_radiobtn_active)

    def add_button_click(self):
        add_dialog = AddDialog(self)
        add_dialog.exec_()

    def rename_button_click(self):
        selected_category = self.get_selected_category()
        if selected_category:
            rename_dialog = RenameDialog(self, selected_category)
            rename_dialog.exec_()
        else:
            QMessageBox.warning(
                self, 'Fields Required',
                'Please select a category before clicking the rename button again',
                QMessageBox.Ok)

    def delete_button_click(self):
        selected_category = self.get_selected_category()
        if selected_category:
            delete_query = QMessageBox.warning(
                self, 'Delete Category',
                f"Are you sure you want to delete category: {selected_category['category']}",
                QMessageBox.Yes | QMessageBox.No)
            if delete_query == QMessageBox.Yes:
                self.categories_manager.delete(selected_category['type'],
                                               selected_category['category'])
                self.load_categories()
                print(
                    f"{selected_category['category']} is deleted successfully")
            else:
                print('delete query no')
        else:
            QMessageBox.warning(
                self, 'Fields Required',
                'Please select a category before clicking the delete button again',
                QMessageBox.Ok)

    def expense_radiobtn_active(self):
        if self.ui.expense_radioButton.isChecked():
            self.load_categories()

    def income_radiobtn_active(self):
        if self.ui.income_radioButton.isChecked():
            self.load_categories()

    def get_active_radiobtn(self):
        if self.ui.expense_radioButton.isChecked():
            return 'expense'
        else:
            return 'income'

    def load_categories(self):
        self.ui.categories_listWidget.clear()
        self.ui.categories_listWidget.addItems(
            self.categories_manager.category_list[self.get_active_radiobtn()])

    def get_selected_category(self):
        selected_items = self.ui.categories_listWidget.selectedItems()
        if selected_items:
            selected_category = self.ui.categories_listWidget.selectedItems(
            )[0].text()
            return {
                'type': self.get_active_radiobtn(),
                'category': selected_category
            }