import os
import json
import datetime


weekday_index = datetime.datetime.today().weekday()
version_number = os.getenv("version_Number")
sp_version_raw = os.getenv("sp_Version")
json_path = "./src/third_party/ohos_nweb_hap/AppScope/app.json5.template"
with open(json_path, "r", encoding="utf-8") as f:
    data = json.load(f)
original_code = str(data["app"].get("versionCode"))
original_name = data["app"].get("versionName")
base_prefix = original_code[:4]
base_version = original_code[4:7]
base_spcode = original_code[7:9]
if "sp" in original_name:
    base_name_version = original_name.split(".")[-1].split("sp")[0]
    base_name_sp = original_name.split("sp")[-1]
else:
    base_name_version = original_name.split(".")[-1]
    base_name_sp = ""
new_version_code_str = base_version
new_version_name_str = base_name_version
new_spcode_str = base_spcode
new_sp_label = f"sp{base_name_sp}"
try:
    if version_number and version_number.isdigit():
        version_number_raw = version_number
        if len(version_number) == 2:
            new_version_code_str = "0" + version_number
        elif len(version_number) == 3:
            new_version_code_str = version_number
        else:
            raise ValueError("version_Number error")
        new_version_name_str = version_number_raw
    if sp_version_raw:
        sp_values = sp_version_raw.strip().split(",")
        if len(sp_values) != 7:
            raise ValueError(f"sp_version_raw length error: expected 7, got {len(sp_values)}")
        if not sp_values[weekday_index].isdigit():
            raise ValueError(f"sp_version_raw value at index {weekday_index} is not a digit: {sp_values[weekday_index]}")
        sp_today = int(sp_values[weekday_index])
        new_spcode_str = f"{sp_today:02d}"
        new_sp_label = f"sp{sp_today}"
        should_update = True
    if version_number or sp_version_raw:
        updated_code = f"{base_prefix}{new_version_code_str}{new_spcode_str}"
        dot_index = original_name.rfind(".")
        prefix_name = original_name[:dot_index]
        if new_spcode_str == "00":
            updated_name = f"{prefix_name}.{new_version_name_str}"
        else:
            updated_name = f"{prefix_name}.{new_version_name_str}{new_sp_label}"
        data["app"]["versionCode"] = int(updated_code)
        data["app"]["versionName"] = updated_name
        with open(json_path, "w", encoding="utf-8") as f:
            json.dump(data, f, indent=2, ensure_ascii=False)
        print(f"versionCode → {updated_code}")
        print(f"versionName → {updated_name}")
    else:
        print("versionCode and versionName not change")
except ValueError as e:
    print(f"Error: {e}")