import re
import sys
import subprocess
import tkinter as tk


class CheackUpdates:
    def __init__(self):
        self.os_type = sys.platform
        self.root = tk.Tk()
        self.url = f"https://pypi.org/pypi/turcar/json"

    def is_windows(self):
        return self.os_type.startswith('win')

    def is_linux(self):
        return self.os_type.startswith('linux')

    def is_mac(self):
        return self.os_type.startswith('darwin')

    def close(self):
        self.root.destroy()
    # 检查版本
    def cheack_version(self, version):
        self.root.title('新版本更新')
        self.root.resizable(False, False)
        self.root.geometry("300x200")  # 设置弹框大小
        popup_label = tk.Label(self.root, text="发现新版本，是否立即更新？", font=("Arial", 16))
        popup_label.pack(pady=20)

        popup_button_update = tk.Button(self.root, text="更新", command=lambda: self.update_bash('/home/orangepi/yb/thonnyFile/turcar.bash', version))
        popup_button_update.pack(pady=10)

        popup_button_not_update = tk.Button(self.root, text="不更新", command=self.close)
        popup_button_not_update.pack(pady=10)
        self.root.geometry(
            "500x200+{}+{}".format(int(self.root.winfo_screenwidth() / 2 - 250),
                                   int(self.root.winfo_screenheight() / 2 - 100)))  # 根据窗口大小调整位置
        self.root.mainloop()

    # 更新脚本中的版本号
    def update_bash(self, filename, new_version):
        """
        更新脚本中的版本号

        Args:
            filename: 要更新的脚本文件名
            new_version: 新的版本号，格式为 x.x.x
        """
        # 使用正则表达式匹配并替换版本号
        with open(filename, 'r') as file:
            content = file.read()
            new_content = re.sub(r'(VERSION=)\d+\.\d+\.\d+', r'\g<1>' + new_version, content)

        # 将更新后的内容写回脚本文件
        with open(filename, 'w') as file:
            file.write(new_content)

        # 指定版本更新
        execute_bash_command(filename)
        self.root.destroy()


# 执行 Bash 命令
def execute_bash_command(command):
    # subprocess.run(command, shell=True)
    # 执行命令并获取输出
    result = subprocess.run(command, shell=True, capture_output=True, text=True)

    # 输出命令执行结果
    print("命令输出：")
    print(result.stdout)
    print()

    # 输出命令的退出状态码
    print("退出状态码：", result.returncode)
