"""
Storage package for image upload abstractions.

This package provides a clean abstraction layer for image storage operations,
supporting multiple backends (filesystem, Cloudinary) through a common interface.

Main classes:
- ImageStorageAdapter: Abstract base class for storage implementations
- FilesystemStorageAdapter: Local filesystem storage implementation
- CloudinaryStorage: Cloudinary cloud storage implementation
- StorageFactory: Factory for creating storage backend instances
- CloudinaryConfig: Configuration for Cloudinary backend

Usage:
    >>> from common.storage import StorageFactory
    >>> storage = StorageFactory.get_storage_backend()
    >>> public_id = storage.upload(image_file, "reviews/property")
    >>> url = storage.get_url(public_id)
"""

from .adapters import ImageStorageAdapter
from .filesystem_storage import FilesystemStorageAdapter
from .cloudinary_storage import CloudinaryStorage
from .factory import StorageFactory
from .config import CloudinaryConfig
from .exceptions import (
    StorageError,
    StorageUploadError,
    StorageDeleteError,
    StorageNotFoundError,
    StorageQuotaError,
    CloudinaryAuthError,
    CloudinaryRateLimitError
)

__all__ = [
    'ImageStorageAdapter',
    'FilesystemStorageAdapter',
    'CloudinaryStorage',
    'StorageFactory',
    'CloudinaryConfig',
    'StorageError',
    'StorageUploadError',
    'StorageDeleteError',
    'StorageNotFoundError',
    'StorageQuotaError',
    'CloudinaryAuthError',
    'CloudinaryRateLimitError'
]