#!/usr/bin/python3
import alterator_entry as ae

import os
import sys
import platform
import argparse
import tomlkit

EDITIONS_DIR = os.getenv("ALTERATOR_EDITIONS_DIR", "/usr/share/alterator/editions")
COMPONENTS_DIR = os.getenv(
    "ALTERATOR_COMPONENTS_DIR", "/usr/share/alterator/components"
)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--section",
        "-s",
        help="Section to extract packages for",
        default=None,
    )
    parser.add_argument(
        "--internal",
        "-i",
        help="Internal section to extract packages for",
        default=None,
    )
    parser.add_argument(
        "--arch",
        "-a",
        metavar="ARCH",
        help="Architecture to extract packages for",
        default=platform.machine(),
    )
    parser.add_argument(
        "--kflavours",
        "-k",
        help="Kernel(s) to extract packages for",
        default=["6.12"],
        nargs="+",
    )
    parser.add_argument(
        "--desktop",
        "-d",
        help="Desktop environment to extract packages for",
        default="GNOME",
    )
    parser.add_argument(
        "--language",
        "-l",
        help="Language to extract packages for",
        default="ru",
    )
    parser.add_argument(
        "files",
        help="edition files to extract components and therefore packages",
        nargs="*",
    )
    args = parser.parse_args()

    if args.files:
        edition_files = args.files
    else:
        edition_files = []
        for dirname in os.listdir(EDITIONS_DIR):
            expected_filename = f"{EDITIONS_DIR}/{dirname}/{dirname}.edition"
            if os.path.isfile(expected_filename):
                edition_files.append(expected_filename)
            else:
                print(
                    f"WARNING: expected file {expected_filename} does not exists",
                    file=sys.stderr,
                )

    for file in edition_files:
        with open(file, "rb") as f:
            edition_data = tomlkit.load(f)

        edition_name = edition_data["name"]
        print(f"# Edition {edition_name}")

        options = ae.PackagesFilterOptions(
            kflavours=args.kflavours,
            arch=args.arch,
            section=args.section,
            desktop=args.desktop,
            language=args.language,
            image_ignore=False,
            internal=args.internal,
            internal_ignore=False,
        )

        groups = ae.extract_package_groups_from_edition(file, options, COMPONENTS_DIR)
        for component_name, packages in groups:
            print(f"# Component {component_name}")
            for pkg in packages:
                print(pkg)


if __name__ == "__main__":
    main()
