from PyQt5.QtWidgets import QDialog, QLabel, QComboBox, QPushButton, QApplication
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem

from ..core.core import MessageProcessor
from ..db_server import storage


class DelUserDialog(QDialog):
    """
    Класс - диалог выбора контакта для удаления.
    """

    def __init__(self, db: storage, server: MessageProcessor):
        super().__init__()
        self.db = db
        self.server = server

        self.setFixedSize(350, 120)
        self.setWindowTitle("Удаление пользователя")
        self.setAttribute(Qt.WA_DeleteOnClose)
        self.setModal(True)

        self.selector_label = QLabel("Выберите пользователя для удаления:", self)
        self.selector_label.setFixedSize(200, 20)
        self.selector_label.move(10, 0)

        self.selector = QComboBox(self)
        self.selector.setFixedSize(200, 20)
        self.selector.move(10, 30)

        self.btn_ok = QPushButton("Удалить", self)
        self.btn_ok.setFixedSize(100, 30)
        self.btn_ok.move(230, 20)
        self.btn_ok.clicked.connect(self.remove_user)

        self.btn_cancel = QPushButton("Отмена", self)
        self.btn_cancel.setFixedSize(100, 30)
        self.btn_cancel.move(230, 60)
        self.btn_cancel.clicked.connect(self.close)

        self.all_users_fill()

    def all_users_fill(self):
        """Метод заполняющий список пользователей."""
        self.selector.addItems([item[0] for item in self.db.users_list()])

    def remove_user(self):
        """Метод - обработчик удаления пользователя."""
        username = self.selector.currentText()
        if self.db.check_user_existing(username):
            self.db.remove_user(username)

            if username in self.server.names:
                sock = self.server.names[username]
                del self.server.names[username]
                self.server.remove_client(sock)
            # Рассылаем клиентам сообщение о необходимости обновить справочники
            self.server.service_update_lists()
            self.close()
        else:
            self.messages.critical(self, "Ошибка", "Не удалось удалить пользователя.")
            return
