import sys
from importlib.abc import MetaPathFinder
from typing import List


class BlockImportFinder(MetaPathFinder):
    def __init__(self, blocked_modules: List[str]):
        self.blocked_modules = set(blocked_modules)

    def find_spec(self, fullname, path, target=None):
        # 完全修飾名とサブモジュールもブロック
        for blocked in self.blocked_modules:
            if fullname == blocked or fullname.startswith(blocked + "."):
                raise ImportError(f"Importing '{fullname}' is blocked.")
        return None  # 他のファインダーに処理を委ねる


def block_imports(blocked_modules: List[str]) -> BlockImportFinder:
    """
    指定されたモジュールのインポートをブロックするインポートファインダーを追加します。

    Args:
        blocked_modules (List[str]): ブロックしたいモジュール名のリスト。

    Returns:
        BlockImportFinder: 追加されたカスタムファインダーのインスタンス。
    """
    finder = BlockImportFinder(blocked_modules)
    sys.meta_path.insert(0, finder)  # 優先度を高くするために先頭に挿入
    return finder