"""Statistics calculation for gallery directories."""

from pathlib import Path


def calculate_directory_stats(directory: Path) -> dict:
    """
    Calculate statistics for a directory.

    Args:
        directory: Path to the directory to analyze

    Returns:
        Dictionary containing file count, folder count, and total size
    """
    stats = {
        "file_count": 0,
        "folder_count": 0,
        "total_size": 0,
        "pdf_size": 0,
        "png_size": 0,
    }

    if not directory.exists():
        return stats

    for item in directory.rglob("*"):
        if item.is_file():
            stats["file_count"] += 1
            size = item.stat().st_size
            stats["total_size"] += size

            if item.suffix.lower() == ".pdf":
                stats["pdf_size"] += size
            elif item.suffix.lower() == ".png":
                stats["png_size"] += size
        elif item.is_dir():
            stats["folder_count"] += 1

    return stats


def format_file_size(size_bytes: int) -> str:
    """
    Format file size in human readable format.

    Args:
        size_bytes: Size in bytes

    Returns:
        Formatted size string
    """
    if size_bytes == 0:
        return "0 B"

    size_names = ["B", "KB", "MB", "GB", "TB"]
    size = float(size_bytes)
    i = 0
    while size >= 1024 and i < len(size_names) - 1:
        size /= 1024
        i += 1

    return f"{size:.1f} {size_names[i]}"
