import os
from pathlib import Path
from checkpoint.common.constant import DIR_MODE, FILE_MODE


def set_directory_permissions(target_dir: str | Path) -> None:
    # Set root directory permissions
    target_dir.chmod(DIR_MODE)

    # Traverse the directory and set appropriate permissions for all files and subdirectories
    try:
        for root, dirs, files in os.walk(target_dir):
            # Set subdirectory permissions using pathlib operations
            root_path = Path(root)
            for directory in dirs:
                (root_path / directory).chmod(DIR_MODE)

            # Set file permissions using pathlib operations
            for file in files:
                (root_path / file).chmod(FILE_MODE)
    except OSError as e:
        raise OSError(f"Error occurred while setting permissions: {target_dir}") from e