import sys
import subprocess
from pathlib import Path
from datetime import date

# =========================================================
# CONFIG
# =========================================================

VBS_SCRIPT = Path(__file__).parent / "set_cell_silent.vbs"

# =========================================================
# PREFIXE VERSION
# =========================================================

def detecter_major(path: Path) -> int:

    nom = path.name.lower()

    if "restauration" in nom:
        return 2

    return 1


# =========================================================
# LECTURE VERSION
# =========================================================

def lire_version(path: Path, major: int):

    if not path.exists():
        return [major, 0, 0]

    contenu = path.read_text(encoding="utf-8").strip().splitlines()

    if not contenu:
        return [major, 0, 0]

    try:
        version = [int(x) for x in contenu[0].split(".")]

        while len(version) < 3:
            version.append(0)

        version = version[:3]

        # force le major correct
        version[0] = major

        return version

    except Exception:
        return [major, 0, 0]


# =========================================================
# INCREMENT
# =========================================================

def increment_patch(version):
    version[2] += 1
    return version


# =========================================================
# ECRITURE TXT
# =========================================================

def ecrire_version_txt(path: Path, version):

    version_str = ".".join(str(x) for x in version)

    contenu = f"{version_str}\n{date.today().isoformat()}\n"

    path.write_text(contenu, encoding="utf-8")

    return version_str


# =========================================================
# ECRITURE EXCEL
# =========================================================

def ecrire_version_excel(classeur: Path, version_str: str):

    if not classeur.exists():
        print(f"Classeur introuvable : {classeur}")
        return

    valeur = f"Version : {version_str}"

    cmd = [
        "cscript",
        "//nologo",
        str(VBS_SCRIPT),
        str(classeur),
        "Tableau de bord",
        "C1",
        valeur
    ]

    subprocess.run(cmd, check=True)


# =========================================================
# MAIN
# =========================================================

def main():

    if len(sys.argv) < 3:
        print("Usage :")
        print("python maj_version.py VERSION.txt classeur.xlsm")
        sys.exit(1)

    version_file = Path(sys.argv[1])
    classeur = Path(sys.argv[2])

    major = detecter_major(version_file)

    version = lire_version(version_file, major)

    version = increment_patch(version)

    version_str = ecrire_version_txt(version_file, version)

    ecrire_version_excel(classeur, version_str)

    print(f"Nouvelle version : {version_str}")
    print(f"Classeur mis à jour : {classeur.name}")


if __name__ == "__main__":
    main()