from PyQt5.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QAbstractItemView, QGroupBox, \
    QMessageBox, QDesktopWidget, QListWidget, QListWidgetItem, QPushButton, QHeaderView
from PyQt5.QtCore import pyqtSignal
from .custom_widgets import QTableWidgetPandasDF
import pandas as pd


class ILTISTransferDialog(QMainWindow):

    send_data_signal = pyqtSignal(list, list, pd.DataFrame, name="send data")

    def __init__(self, data_loaded_df, metadata_to_choose_from):

        super().__init__()

        self.data_loaded_df = data_loaded_df

        centralWidget = QWidget(self)
        main_vbox = QVBoxLayout(centralWidget)

        self.table = QTableWidgetPandasDF(self)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table.setSelectionMode(QAbstractItemView.MultiSelection)
        self.table.refresh(data_loaded_df)

        main_vbox.addWidget(self.table)

        metadata_choice_box = QGroupBox("Select one or more metadata that will be used to "
                                        "construct the dataset name in iltis")
        metadata_choice_vboxlayout = QVBoxLayout(metadata_choice_box)
        self.metadata_choice_list = QTableWidgetPandasDF(self)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.metadata_choice_list.setSelectionMode(QAbstractItemView.MultiSelection)
        self.metadata_choice_list.refresh(pd.DataFrame.from_dict({"Metadata to choose from": metadata_to_choose_from}))
        self.metadata_choice_list.resizeColumnsToContents()

        metadata_choice_vboxlayout.addWidget(self.metadata_choice_list)

        main_vbox.addWidget(metadata_choice_box)

        import_button = QPushButton("Import")
        import_button.clicked.connect(self.send_data)

        main_vbox.addWidget(import_button)

        self.setCentralWidget(centralWidget)

        self.setWindowTitle('Transfer Data to ILTIS')
        self.setGeometry(300, 300, 500, 700)
        self.center()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def send_data(self):

        indices = [x.row() for x in self.table.selectionModel().selectedRows()]
        metadata_cols = [self.metadata_choice_list.item(x.row(), 0).text()
                         for x in self.metadata_choice_list.selectionModel().selectedRows()]

        if not indices:
            QMessageBox.critical(self, "No data Selected!", "Please select some data to continue transfer to ILTIS")
        else:
            self.send_data_signal.emit(indices, metadata_cols, self.data_loaded_df)
            self.close()





from PyQt5.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QAbstractItemView, QGroupBox, \
    QMessageBox, QDesktopWidget, QListWidget, QListWidgetItem, QPushButton, QHeaderView
from PyQt5.QtCore import pyqtSignal
from .custom_widgets import QTableWidgetPandasDF
import pandas as pd


class ILTISTransferDialog(QMainWindow):

    send_data_signal = pyqtSignal(list, list, pd.DataFrame, name="send data")

    def __init__(self, data_loaded_df, metadata_to_choose_from):

        super().__init__()

        self.data_loaded_df = data_loaded_df

        centralWidget = QWidget(self)
        main_vbox = QVBoxLayout(centralWidget)

        self.table = QTableWidgetPandasDF(self)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table.setSelectionMode(QAbstractItemView.MultiSelection)
        self.table.refresh(data_loaded_df)

        main_vbox.addWidget(self.table)

        metadata_choice_box = QGroupBox("Select one or more metadata that will be used to "
                                        "construct the dataset name in iltis")
        metadata_choice_vboxlayout = QVBoxLayout(metadata_choice_box)
        self.metadata_choice_list = QTableWidgetPandasDF(self)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.metadata_choice_list.setSelectionMode(QAbstractItemView.MultiSelection)
        self.metadata_choice_list.refresh(pd.DataFrame.from_dict({"Metadata to choose from": metadata_to_choose_from}))
        self.metadata_choice_list.resizeColumnsToContents()

        metadata_choice_vboxlayout.addWidget(self.metadata_choice_list)

        main_vbox.addWidget(metadata_choice_box)

        import_button = QPushButton("Import")
        import_button.clicked.connect(self.send_data)

        main_vbox.addWidget(import_button)

        self.setCentralWidget(centralWidget)

        self.setWindowTitle('Transfer Data to ILTIS')
        self.setGeometry(300, 300, 500, 700)
        self.center()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def send_data(self):

        indices = [x.row() for x in self.table.selectionModel().selectedRows()]
        metadata_cols = [self.metadata_choice_list.item(x.row(), 0).text()
                         for x in self.metadata_choice_list.selectionModel().selectedRows()]

        if not indices:
            QMessageBox.critical(self, "No data Selected!", "Please select some data to continue transfer to ILTIS")
        else:
            self.send_data_signal.emit(indices, metadata_cols, self.data_loaded_df)
            self.close()




