import re
import sys
import subprocess

# 文件路径
VERSION_FILE = "VERSION"
BUILD_GRADLE_FILE = "api/build.gradle"
JAVA_VERSION_FILE = "api/src/main/java/telegram/files/Start.java"
PACKAGE_JSON_FILE = "web/package.json"

def read_version():
    """读取 VERSION 文件中的版本号"""
    with open(VERSION_FILE, "r") as file:
        return file.read().strip()

def write_version(version):
    """将版本号写入 VERSION 文件"""
    with open(VERSION_FILE, "w") as file:
        file.write(version + "\n")

def update_build_gradle(version):
    """更新 build.gradle 中的版本号"""
    with open(BUILD_GRADLE_FILE, "r") as file:
        content = file.read()

    # 使用正则表达式匹配 version = "x.y.z"
    updated_content = re.sub(r'version\s*=\s*\'.*?\'', f'version = \'{version}\'', content)

    with open(BUILD_GRADLE_FILE, "w") as file:
        file.write(updated_content)

def update_java_version(version):
    """更新 Start.java 中的版本号"""
    with open(JAVA_VERSION_FILE, "r") as file:
        content = file.read()

    # 使用正则表达式匹配 version = "x.y.z"
    updated_content = re.sub(r'VERSION\s*=\s*".*?"', f'VERSION = "{version}"', content)

    with open(JAVA_VERSION_FILE, "w") as file:
        file.write(updated_content)

def update_package_json(version):
    """更新 package.json 中的版本号"""
    with open(PACKAGE_JSON_FILE, "r") as file:
        content = file.read()

    # 使用正则表达式匹配 "version": "x.y.z"
    updated_content = re.sub(r'"version"\s*:\s*".*?"', f'"version": "{version}"', content)

    with open(PACKAGE_JSON_FILE, "w") as file:
        file.write(updated_content)

def git_commit_and_tag(version, message):
    """执行 Git 提交并创建标签"""
    try:
        # 添加修改到 Git 暂存区
        subprocess.run(["git", "add", VERSION_FILE, BUILD_GRADLE_FILE, JAVA_VERSION_FILE, PACKAGE_JSON_FILE], check=True)
        # 提交修改
        subprocess.run(["git", "commit", "-m", message], check=True)
        # 创建标签
        subprocess.run(["git", "tag", version], check=True)
        print(f"已成功提交修改并创建标签：{version}")
    except subprocess.CalledProcessError as e:
        print(f"Git 操作失败: {e}")
        sys.exit(1)

def main():
    # 获取命令行参数中的版本号
    version = sys.argv[1] if len(sys.argv) > 1 else None

    if version is None:
        print("请提供版本号，例如：python update_version.py 1.2.3")
        sys.exit(1)

    # 输入变更内容
    change_message = input("请输入版本变更内容: ").strip()

    # 更新 VERSION 文件
    write_version(version)

    # 更新 build.gradle、java 和 package.json
    update_build_gradle(version)
    update_java_version(version)
    update_package_json(version)

    print(f"版本号已更新为：{version}")

    if change_message:
        # 提交到 Git 并创建标签
        git_commit_and_tag(version, change_message)

if __name__ == "__main__":
    main()
