import sys
import shutil
from PyQt5.QtGui import QIcon
from cryptography.fernet import Fernet
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog, QVBoxLayout, QLabel, QMessageBox


class FileDialogExample(QWidget):
    def __init__(self):
        super().__init__()

        # 设置窗口
        self.setWindowTitle("许可更新管理器")
        self.setGeometry(100, 100, 300, 150)

        # 设置窗口图标
        self.setWindowIcon(QIcon("icon.png"))  # 使用你自己的图标文件路径
        self.resize(300, 120)
        # 创建布局
        layout = QVBoxLayout()

        # 创建标签
        self.label = QLabel("请选择一个许可文件", self)
        self.label.setWordWrap(True)
        layout.addWidget(self.label)

        # 创建选择文件按钮
        self.select_file_button = QPushButton("选择文件", self)
        self.select_file_button.setFixedSize(60, 25)
        self.select_file_button.clicked.connect(self.select_file)
        layout.addWidget(self.select_file_button)

        # 创建确定按钮
        self.ok_button = QPushButton("确定", self)
        self.ok_button.setFixedSize(60, 25)
        self.ok_button.clicked.connect(self.ok_button_clicked)
        layout.addWidget(self.ok_button)

        # 设置窗口布局
        self.setLayout(layout)

    def copy_file(self, src_path, dst_path):
        shutil.copy(src_path, dst_path)

    def select_file(self):
        # 打开文件对话框选择文件
        options = QFileDialog.Options()
        file, _ = QFileDialog.getOpenFileName(self, "选择文件", "", "Text Files (*.txt);;All Files (*)",
                                              options=options)
        if file:
            print(file)
            try:
                self.selected_file = file  # 保存选择的文件路径
                licensefile = file
                # 打开文件并读取内容
                text = []
                with open(licensefile, 'r') as file:
                    for line in file:
                        text.append(line.replace('\n', ' '))
                # 打印文件内容
                print(text)
                # 尝试执行的代码
                fernet = Fernet(text[0].encode("utf-8"))
                decrypted_message = fernet.decrypt(text[1].encode("utf-8"))
                license = decrypted_message.decode('utf-8')
                licenseDict = self.str_to_dict(license)
                host = licenseDict["host"]
                date = licenseDict["license"]
                # QMessageBox.information(self, "提示信息", f"许可文件解析成功，授权机器名：{host}，授权到期时间：{date}")
                self.label.setStyleSheet("color: green;")  # 这里 #999999 是一种浅灰色
                self.label.setText("许可文件解析成功，授权机器名：{}，授权到期时间：{}。".format(host, date))
            except Exception as e:
                del self.selected_file  # 保存选择的文件路径
                # 处理异常的代码
                # QMessageBox.critical(None, 'Error', "许可文件解析失败，请检查！")
                self.label.setStyleSheet("color: red;")  # 这里 #999999 是一种浅灰色
                self.label.setText("许可文件解析失败，请检查！")

    def ok_button_clicked(self):
        # 执行业务逻辑
        if hasattr(self, 'selected_file'):
            licensefile = "license.txt"
            self.copy_file(self.selected_file, licensefile)
            # 打开文件并读取内容
            # text = []
            # with open(licensefile, 'r') as file:
            #     for line in file:
            #         text.append(line.replace('\n', ' '))
            # # 打印文件内容
            # print(text)
            # # 尝试执行的代码
            # fernet = Fernet(text[0].encode("utf-8"))
            # decrypted_message = fernet.decrypt(text[1].encode("utf-8"))
            # license = decrypted_message.decode('utf-8')
            # licenseDict = self.str_to_dict(license)
            # host = licenseDict["host"]
            # date = licenseDict["license"]
            # QMessageBox.information(self, "提示信息", f"许可文件更新成功，授权机器名：{host}，授权到期时间：{date}")
            QMessageBox.information(self, "提示信息", f"许可文件更新成功")
            # # 假设这里是业务逻辑：读取文件内容
            # try:
            #     with open(self.selected_file, 'r') as f:
            #         content = f.read()
            #         print(f"文件内容: {content}")
            # except Exception as e:
            #     print(f"读取文件失败: {e}")
        else:
            QMessageBox.information(self, "提示信息", "请选择许可文件")

    def str_to_dict(self, string):
        # 去除首尾的花括号
        string = string.strip("{}")
        # 分割每个键值对
        pairs = string.split(", ")
        # 创建空字典
        result = {}
        # 遍历键值对并添加到字典中
        for pair in pairs:
            key, value = pair.split(": ")
            # 去除键和值两边的引号
            key = key.strip("'")
            value = value.strip("'")
            # 添加到字典中
            result[key] = value
        return result


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = FileDialogExample()
    window.show()
    sys.exit(app.exec_())
