#!/usr/bin/env python3
import subprocess
import tempfile
import time
from pathlib import Path
from typing import Iterator, List

from manifestoo.addon import Addon, AddonNotFound
from manifestoo.odoo_series import OdooEdition

SERIES = [
    # branch,  enterprise
    ("master", True),
    ("15.0", True),
    ("14.0", True),
    ("13.0", True),
    ("12.0", True),
    # ("11.0", True),
    # ('10.0', True),
    # ('9.0', True),
    # ('8.0', False),
]


def _list_addons(addons_dir: Path, add_base: bool) -> Iterator[str]:
    if add_base:
        yield "base"
    for addon_dir in addons_dir.iterdir():
        try:
            yield Addon.from_addon_dir(addon_dir, allow_not_installable=True).name
        except AddonNotFound:
            pass


def _write_addons_list(addons_dir: Path, suffix: str, add_base: bool) -> None:
    list_path = (
        Path(__file__).parent
        / "src"
        / "manifestoo"
        / "core_addons"
        / f"addons-{suffix}.txt"
    )
    with list_path.open("w") as f:
        print("# generated on", time.asctime(), file=f)
        for addon_name in sorted(_list_addons(addons_dir, add_base)):
            print(addon_name, file=f)


def check_call(cmd: List[str]) -> None:
    print(" ".join(cmd))
    subprocess.check_call(cmd)


def main() -> None:
    for branch, enterprise in SERIES:
        with tempfile.TemporaryDirectory() as tmpdir:
            check_call(
                [
                    "git",
                    "clone",
                    "--depth=1",
                    "--branch",
                    branch,
                    "https://github.com/odoo/odoo",
                    tmpdir,
                ]
            )
            _write_addons_list(
                Path(tmpdir) / "addons",
                f"{branch}-{OdooEdition.CE.value}",
                add_base=True,
            )
        if enterprise:
            with tempfile.TemporaryDirectory() as tmpdir:
                check_call(
                    [
                        "git",
                        "clone",
                        "--depth=1",
                        "--branch",
                        branch,
                        "git@github.com:odoo/enterprise",
                        tmpdir,
                    ]
                )
                _write_addons_list(
                    Path(tmpdir),
                    f"{branch}-{OdooEdition.EE.value}",
                    add_base=False,
                )


main()
