import subprocess
import os
import tempfile
import shutil
from pathlib import Path
from tqdm import tqdm

source_dir = Path("drawings")

files = list((source_dir / "apps").iterdir()) + list((source_dir / "categories").iterdir()) + list((source_dir / "places").iterdir()) + list((source_dir / "status").iterdir())
sizes = (64, 48, 32, 24, 16)
symbolic_sizes = (24, 16)

build_dir = Path("build")

if build_dir.exists():
    shutil.rmtree(build_dir)

build_dir.mkdir()

# Copy the theme file
shutil.copy(Path("index.theme"), build_dir)

for size in sizes:
    (build_dir / f"{size}x{size}").mkdir()

for file in tqdm(files, colour="green"):
    if file.name.endswith(".svg"):
        with tempfile.TemporaryDirectory() as scratch:
            subprocess.run(["inkscape", "--export-page=all", "-Tl", "-o", str(Path(scratch) / "page.svg"), str(file)], stderr=subprocess.DEVNULL)
            # Temporary names will be used; move them
            icon_name = file.name
            category_name = file.parent.name
            aliases = []
            if (file.parent / (file.name.removesuffix(".svg") + ".aliases")).exists():
                with open(file.parent / (file.name.removesuffix(".svg") + ".aliases")) as f:
                    aliases = f.read().splitlines()
            if not icon_name.endswith("-symbolic.svg"):
                for i, size in enumerate(sizes, 1):
                    (build_dir / f"{size}x{size}" / category_name).mkdir(parents=True, exist_ok=True)
                    shutil.move(Path(scratch) / f"page_p{i}.svg", build_dir / f"{size}x{size}" / category_name / icon_name)
                    for alias in aliases:
                        os.symlink(icon_name, build_dir / f"{size}x{size}" / category_name / (alias + ".svg"))
            else:
                for i, size in enumerate(symbolic_sizes, 1):
                    (build_dir / f"symbolic_{size}x{size}" / category_name).mkdir(parents=True, exist_ok=True)
                    shutil.move(Path(scratch) / f"page_p{i}.svg", build_dir / f"symbolic_{size}x{size}" / category_name / icon_name)
                    for alias in aliases:
                        os.symlink(icon_name, build_dir / f"symbolic_{size}x{size}" / category_name / (alias + ".svg"))

