#!/usr/bin/env python
import os
import shutil
import sys

def clean_pycache(root_dir):
    """
    Recursively deletes all __pycache__ directories and .pyc files.
    """
    print(f"Cleaning __pycache__ in: {root_dir}")
    for root, dirs, files in os.walk(root_dir):
        # Delete __pycache__ directories
        if "__pycache__" in dirs:
            pycache_path = os.path.join(root, "__pycache__")
            print(f"Removing directory: {pycache_path}")
            shutil.rmtree(pycache_path)
            dirs.remove("__pycache__")  # Don't visit the deleted directory

        # Delete orphan .pyc files
        for file in files:
            if file.endswith(".pyc"):
                pyc_path = os.path.join(root, file)
                print(f"Removing file: {pyc_path}")
                os.remove(pyc_path)

def clean_extensions(root_dir):
    """
    Recursively deletes all compiled .so and .pyd files.
    """
    print(f"Cleaning compiled extensions in: {root_dir}")
    for root, dirs, files in os.walk(root_dir):
        for file in files:
            if file.endswith(".so") or file.endswith(".pyd"):
                ext_path = os.path.join(root, file)
                print(f"Removing extension: {ext_path}")
                os.remove(ext_path)

if __name__ == "__main__":
    project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
    
    # Clean pycache
    clean_pycache(project_root)
    
    # Optionally clean extensions if requested via argument
    if len(sys.argv) > 1 and sys.argv[1] == "--all":
        clean_extensions(project_root)
    
    print("Cleanup complete.")
