import os
import json

BASE_DIR = "FrontEnd/js"   # adjust if needed
OUTPUT_FILE = "import-map.json"

def to_key(filepath):
    rel_path = os.path.relpath(filepath, BASE_DIR).replace("\\", "/")
    rel_path = rel_path[:-3] if rel_path.endswith(".js") else rel_path
    parts = rel_path.split("/")

    # Remove duplicate filename repetition
    if len(parts) > 1 and parts[-1].lower() == parts[-2].lower():
        parts.pop()

    return "/".join(parts).lower()

def build_map(base_dir):
    imports = {}
    for root, _, files in os.walk(base_dir):
        for f in files:
            if f.endswith(".js"):
                full_path = os.path.join(root, f)
                key = to_key(full_path)
                rel = "./" + os.path.relpath(full_path, os.path.dirname(base_dir)).replace("\\", "/")
                imports[key] = rel
    return {"imports": imports}

if __name__ == "__main__":
    import_map = build_map(BASE_DIR)

    # Sort keys alphabetically
    sorted_imports = dict(sorted(import_map["imports"].items()))

    # Pretty print with aligned colons
    max_key_len = max(len(k) for k in sorted_imports.keys())
    formatted = "{\n  \"imports\": {\n"
    for k, v in sorted_imports.items():
        formatted += f"    \"{k}\":{(max_key_len - len(k) + 1) * ' '}\"{v}\",\n"
    formatted = formatted.rstrip(",\n") + "\n  }\n}\n"

    with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
        f.write(formatted)

    print(f"✅ Neatly formatted import map written to {OUTPUT_FILE}")
