from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QLabel, QAbstractItemView, QHBoxLayout, QPushButton

from utils.qtmodels.members_drag_drop_table_model import MembersDragDropTableModel
from utils.table import ElemTable


class MembersDragDropTable(ElemTable):
    deleteClicked = pyqtSignal(int)

    def __init__(self, id_, data, label_text, parent=None):
        super(MembersDragDropTable, self).__init__(MembersDragDropTableModel(id_, data, num_columns=2), 0, [], parent)
        self.id_ = id_

        layout = QHBoxLayout()
        self.lblName = QLabel(label_text)
        layout.addWidget(self.lblName)
        btn = QPushButton("-")
        btn.clicked.connect(self.onDeleteClicked)
        layout.addStretch()
        layout.addWidget(btn)
        self.layout.insertLayout(0, layout)

        self.table.setDragDropMode(QAbstractItemView.DragDrop)
        self.table.setDefaultDropAction(Qt.MoveAction)
        self.table.setAcceptDrops(True)
        self.table.setDragEnabled(True)
        self.table.setDropIndicatorShown(False)

    def removeMember(self, member_id):
        self.source_model.removeMemberById(member_id)

    def isEmpty(self):
        return self.source_model.rowCount() <= 0

    def getAllData(self):
        return self.source_model._people

    @property
    def name(self):
        return self.lblName.text()

    @property
    def id_(self):
        return self.id__

    @id_.setter
    def id_(self, id_):
        self.id__ = id_
        self.source_model.id_ = id_

    @pyqtSlot()
    def onDeleteClicked(self):
        self.deleteClicked.emit(self.id_)