class Ui_File_widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)

        self.resize(650, 520)
        self.setMinimumSize(QtCore.QSize(650, 520))
        self.setMaximumSize(QtCore.QSize(650, 520))
        self.display_frame = QtWidgets.QFrame(self)
        self.display_frame.setGeometry(QtCore.QRect(30, 10, 530, 440))
        self.display_frame.setStyleSheet(
            "background-color: white;border-style: outset; border-width: 0px")

        self.gridLayout = QtWidgets.QGridLayout(self.display_frame)
        self.scrollArea = QtWidgets.QScrollArea(self.display_frame)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOff)
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(
            QtCore.QRect(30, 10, 530, 440))
        self.verticalLayout = QtWidgets.QVBoxLayout(
            self.scrollAreaWidgetContents)

        self.extention_dic = {
            'TXT': os.getcwd() + '/img/TXT.jpg',
            'HWP': os.getcwd() + '/img/HWP.jpg',
            'PY': os.getcwd() + '/img/PY.jpg',
            'DOCS': os.getcwd() + '/img/DOCS.jpg',
            'PPTX': os.getcwd() + '/img/PPTX.jpg',
            'ZIP': os.getcwd() + '/img/zip.jpg',
            'JAVA': os.getcwd() + '/img/JAVA.jpg',
            'C': os.getcwd() + '/img/C.jpg',
            'PDF': os.getcwd() + '/img/PDF.jpg',
            'CSV': os.getcwd() + '/img/csv.jpg',
            'HTML': os.getcwd() + '/img/html.jpg',
            'JPG': os.getcwd() + '/img/jpg.jpg',
            'PNG': os.getcwd() + '/img/png.jpg',
            'WMA': os.getcwd() + '/img/wma.jpg',
            'MPG': os.getcwd() + '/img/mpg.jpg',
            'GIF': os.getcwd() + '/img/gif.jpg',
            'CSS': os.getcwd() + '/img/css.jpg'
        }

        self.get_file()
        #print(self.file_collect)
        frame_lists = self.create_var_file(file_count, self.file_collect)

        for frame in frame_lists:
            self.display(frame)

        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.gridLayout.addWidget(self.scrollArea, 0, 1, 1, 1)

        self.upload_file = QtWidgets.QPushButton(self)
        self.upload_file.setGeometry(QtCore.QRect(44, 460, 80, 40))
        self.upload_file.setStyleSheet(
            "background-color: #414141; color: white;border-style: outset; border-radius: 5px; border-color: black; border-width: 1px"
        )

        self.download_file = QtWidgets.QPushButton(self)
        self.download_file.setGeometry(QtCore.QRect(185, 460, 80, 40))
        self.download_file.setStyleSheet(
            "background-color: #414141; color: white;border-style: outset; border-radius: 5px; border-color: black; border-width: 1px"
        )

        self.rename_file = QtWidgets.QPushButton(self)
        self.rename_file.setGeometry(QtCore.QRect(330, 460, 80, 40))
        self.rename_file.setStyleSheet(
            "background-color: #414141; color: white;border-style: outset; border-radius: 5px; border-color: black; border-width: 1px"
        )

        self.delete_file = QtWidgets.QPushButton(self)
        self.delete_file.setGeometry(QtCore.QRect(475, 460, 80, 40))
        self.delete_file.setStyleSheet(
            "background-color: #414141; color: white;border-style: outset; border-radius: 5px; border-color: black; border-width: 1px"
        )

        self.cancle_upload_btn = QtWidgets.QPushButton(self)
        self.cancle_upload_btn.setGeometry(QtCore.QRect(460, 400, 80, 40))
        self.cancle_upload_btn.setStyleSheet(
            "background-color: #C4FAFF; color: black; border-style: outset; border-radius: 10px; border-color: #AAAAAA; border-width: 2px"
        )

        self.cancle_download_btn = QtWidgets.QPushButton(self)
        self.cancle_download_btn.setGeometry(QtCore.QRect(460, 400, 80, 40))
        self.cancle_download_btn.setStyleSheet(
            "background-color: #C4FAFF; color: black; border-style: outset; border-radius: 10px; border-color: #AAAAAA; border-width: 2px"
        )

        self.cancle_rename_btn = QtWidgets.QPushButton(self)
        self.cancle_rename_btn.setGeometry(QtCore.QRect(460, 400, 80, 40))
        self.cancle_rename_btn.setStyleSheet(
            "background-color: #C4FAFF; color: black; border-style: outset; border-radius: 10px; border-color: #AAAAAA; border-width: 2px"
        )

        self.cancle_delete_btn = QtWidgets.QPushButton(self)
        self.cancle_delete_btn.setGeometry(QtCore.QRect(460, 400, 80, 40))
        self.cancle_delete_btn.setStyleSheet(
            "background-color: #C4FAFF; color: black; border-style: outset; border-radius: 10px; border-color: #AAAAAA; border-width: 2px"
        )

        self.cancle_upload_btn.hide()
        self.cancle_download_btn.hide()
        self.cancle_rename_btn.hide()
        self.cancle_delete_btn.hide()

        #버튼 액션
        self.upload_file.clicked.connect(lambda: self.call_upload())
        self.download_file.clicked.connect(lambda: self.call_download())
        self.rename_file.clicked.connect(lambda: self.call_rename())
        self.delete_file.clicked.connect(lambda: self.call_delete())

        self.cancle_upload_btn.clicked.connect(lambda: self.cancle_upload())
        self.cancle_download_btn.clicked.connect(
            lambda: self.cancle_download())
        self.cancle_rename_btn.clicked.connect(lambda: self.cancle_rename())
        self.cancle_delete_btn.clicked.connect(lambda: self.cancle_delete())

        self.retranslateUi(self)
        QtCore.QMetaObject.connectSlotsByName(self)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))

        self.upload_file.setText(_translate("Form", "업로드"))
        self.download_file.setText(_translate("Form", "다운로드"))
        self.rename_file.setText(_translate("Form", "파일명 변경"))
        self.delete_file.setText(_translate("Form", "삭제"))

        self.cancle_upload_btn.setText(_translate("Form", "취소"))
        self.cancle_download_btn.setText(_translate("Form", "취소"))
        self.cancle_rename_btn.setText(_translate("Form", "취소"))
        self.cancle_delete_btn.setText(_translate("Form", "취소"))

    def create_var_file(self, count, DB_file):
        frame_lists = []
        prime_list = file_db.prime_check()
        for i in range(0, count):
            frame_list = []

            file_var = "" + str(prime_list[i])
            zero_var = "zero_var" + str(i)
            first_var = "first_var" + str(i)
            second_var = "second_var" + str(i)
            third_var = "third_var" + str(i)
            fourth_var = "fourth_var" + str(i)

            frame_list.append(file_var)
            frame_list.append(zero_var)
            frame_list.append(first_var)
            frame_list.append(second_var)
            frame_list.append(third_var)
            frame_list.append(fourth_var)
            frame_list.append(DB_file[i])

            frame_lists.append(frame_list)

        return frame_lists

    def display(self, frame_list):
        #print("frame_list: ",frame_list[6], frame_list[6][4])

        frame_list[1] = QGroupBox('', self.scrollAreaWidgetContents)
        frame_list[1].setMaximumSize(QtCore.QSize(550, 60))
        frame_list[1].setStyleSheet(
            "background-color: white;border-width: 0px")

        Total_layout = QtWidgets.QBoxLayout(QBoxLayout.LeftToRight,
                                            frame_list[1])
        Total_layout.setContentsMargins(0, 0, 100, 0)

        Left_layout = QtWidgets.QBoxLayout(QBoxLayout.LeftToRight)
        Left_layout.setSpacing(0)

        Center_layout = QtWidgets.QBoxLayout(QBoxLayout.TopToBottom)
        Center_layout.setContentsMargins(0, 0, 0, 0)
        Center_layout.setSpacing(0)

        Right_layout = QtWidgets.QBoxLayout(QBoxLayout.LeftToRight)
        Right_layout.setSpacing(0)

        frame_list[2] = QtWidgets.QPushButton(
            frame_list[1])  # 확장자 별 이미지 , 디비 필요
        frame_list[2].setGeometry(QtCore.QRect(10, 10, 70, 60))
        frame_list[2].setMinimumSize(QtCore.QSize(70, 60))
        frame_list[2].setMaximumSize(QtCore.QSize(70, 60))
        frame_list[2].setStyleSheet("border-width: 0px")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(self.extention_dic[frame_list[6][4]]))
        frame_list[2].setIcon(icon)
        frame_list[2].setIconSize(QtCore.QSize(60, 50))

        frame_list[3] = QtWidgets.QLabel(frame_list[1])
        frame_list[3].setStyleSheet(
            "background-color: #EAFDFF; color: black;border-style: outset; border-radius: 5px; border-color: #3aa0d8; border-width: 2px"
        )
        frame_list[3].setGeometry(QtCore.QRect(80, 10, 250, 30))
        frame_list[3].setMinimumSize(QtCore.QSize(250, 30))
        frame_list[3].setMaximumSize(QtCore.QSize(250, 30))
        title_font = frame_list[3].font()
        title_font.setPointSize(12)
        title_font.setBold(True)
        frame_list[3].setFont(title_font)
        frame_list[3].setText(frame_list[6][2])  #파일 제목

        frame_list[4] = QtWidgets.QLabel(frame_list[1])  #업로드날짜

        frame_list[4].setText(str(frame_list[6][3]))

        frame_list[4].setGeometry(QtCore.QRect(80, 40, 250, 30))
        frame_list[4].setMinimumSize(QtCore.QSize(250, 30))
        frame_list[4].setMaximumSize(QtCore.QSize(250, 30))
        frame_list[4].setStyleSheet(
            "background-color: #EAFDFF; color: black;border-style: outset; border-radius: 5px; border-color: #3aa0d8; border-width: 2px"
        )

        frame_list[5] = QtWidgets.QLineEdit(frame_list[1])  #고유번호
        frame_list[5].setText(frame_list[0])
        frame_list[5].setGeometry(QtCore.QRect(340, 10, 60, 60))
        frame_list[5].setMinimumSize(QtCore.QSize(60, 60))
        frame_list[5].setMaximumSize(QtCore.QSize(60, 60))
        frame_list[5].setStyleSheet(
            "background-color: #EAFDFF; color: black;border-style: outset; border-radius: 5px; border-color: #3aa0d8; border-width: 1px"
        )
        font = frame_list[5].font()
        font.setPointSize(20)
        font.setBold(True)
        frame_list[5].setFont(font)
        frame_list[5].setDragEnabled(True)
        frame_list[5].setReadOnly(True)
        frame_list[5].setAlignment(QtCore.Qt.AlignCenter)

        frame_list[2].clicked.connect(lambda: self.info_file())

        Left_layout.addWidget(frame_list[2])
        Center_layout.addWidget(frame_list[3])
        Center_layout.addWidget(frame_list[4])
        Right_layout.addWidget(frame_list[5])

        Total_layout.addLayout(Left_layout)
        Total_layout.addLayout(Center_layout)
        Total_layout.addLayout(Right_layout)

        self.verticalLayout.addWidget(frame_list[1])

    def info_file(self):
        #디비서 소유자, 등등의 내용 가져와서 찍어줄
        print("파일정보 ㅇ")

    def display_update(self):
        self.get_file()

        for i in reversed(range(self.verticalLayout.count())):
            self.verticalLayout.itemAt(i).widget().setParent(None)

        frame_lists = self.create_var_file(file_count, self.file_collect)

        for frame in frame_lists:
            self.display(frame)

        self.display_frame.update()

    def find_child(self):
        child_list_lineedit = self.findChildren(QtWidgets.QLineEdit)
        child_list_groupbox = self.findChildren(QtWidgets.QGroupBox)
        return child_list_lineedit, child_list_groupbox

    def remove_file(self):
        global file_count

        list_lineedit, list_groupbox = self.find_child()

        for i in range(0, file_count):
            result = list_lineedit[i].text()
            if result == prime_number:  #디비에 result(고유번호)에 해당하는 넘 삭제 메소드 필요
                for g in range(0, file_count):
                    child = list_groupbox[g].findChildren(QtWidgets.QLineEdit)
                    if list_lineedit[i] == child[0]:
                        list_groupbox[g].deleteLater()
                        file_count -= 1

    def call_upload(self):
        self.upload = Upload_File(self)
        self.upload.show()

        self.upload.upload_signal.connect(self.upload_success)
        self.upload.fail_signal.connect(self.upload_fail)
        self.cancle_upload_btn.show()

    def upload_success(self):
        self.display_update()
        self.cancle_upload()

        self.popup = Popup(self)
        self.popup.upload_complete()
        self.popup.show()

    def upload_fail(self):
        self.cancle_upload()

        self.popup = Popup(self)
        self.popup.upload_fail()
        self.popup.show()

    def cancle_upload(self):
        self.upload.deleteLater()
        self.cancle_upload_btn.hide()

    def call_download(self):
        self.download = Download_File(self)
        self.download.show()

        self.download.download_signal.connect(self.download_success)
        self.download.fail_not_exist_signal.connect(
            self.download_fail_not_exist)

        self.cancle_download_btn.show()

    def download_success(self):
        self.cancle_download()

        self.popup = Popup(self)
        self.popup.download_complete()
        self.popup.show()

    def download_fail_not_exist(self):
        self.cancle_download()

        self.popup = Popup(self)
        self.popup.download_fail()
        self.popup.show()

    def cancle_download(self):
        self.download.deleteLater()
        self.cancle_download_btn.hide()

    def call_rename(self):
        self.rename = Rename_File(self)
        self.rename.show()

        self.rename.rename_signal.connect(self.rename_success)
        self.rename.fail_error_signal.connect(self.rename_fail)
        self.rename.fail_not_owner_signal.connect(self.rename_fail_not_owner)
        self.cancle_rename_btn.show()

    def rename_success(self):
        self.display_update()
        self.cancle_rename()

        self.popup = Popup(self)
        self.popup.rename_complete()
        self.popup.show()

    def rename_fail(self):
        self.cancle_rename()

        self.popup = Popup(self)
        self.popup.rename_fail()
        self.popup.show()

    def rename_fail_not_owner(self):
        self.cancle_rename()

        self.popup = Popup(self)
        self.popup.rename_fail_not_owner()
        self.popup.show()

    def cancle_rename(self):
        self.rename.deleteLater()
        self.cancle_rename_btn.hide()

    def call_delete(self):
        '''
        if (hasattr(self, 'download')):
            self.cancle_download()
        if (hasattr(self, 'upload')):
            self.cancle_upload()
        if (hasattr(self, 'rename')):
            self.cancle_rename()
        '''
        self.delete = Delete_File(self)
        self.delete.show()

        self.delete.delete_signal.connect(self.delete_success)
        self.delete.fail_not_exist_signal.connect(self.delete_fail_not_exist)
        self.delete.fail_not_owner_signal.connect(self.delete_fail_not_owner)
        self.cancle_delete_btn.show()

    def delete_success(self):
        self.remove_file()

        self.cancle_delete()

        self.popup = Popup(self)
        self.popup.delete_complete()
        self.popup.show()

    def delete_fail_not_exist(self):
        self.cancle_delete()

        self.popup = Popup(self)
        self.popup.delete_fail_not_exist()
        self.popup.show()

    def delete_fail_not_owner(self):
        self.cancle_delete()

        self.popup = Popup(self)
        self.popup.delete_fail_not_owner()
        self.popup.show()

    def cancle_delete(self):
        self.delete.deleteLater()
        self.cancle_delete_btn.hide()

    def get_file(self):
        self.file_collect = file_db.view_file()