# Klausur-Service Services Package

# Grading Services
from .grading_service import (
    calculate_grade_points,
    calculate_raw_points,
)

# Authentication Services
from .auth_service import (
    get_current_user,
)

# EH Audit Services
from .eh_service import (
    log_audit,
    log_eh_audit,
)

# OCR Services - Lazy imports (require PIL/cv2 which may not be installed)
# These are imported on-demand when actually used
def __getattr__(name):
    """Lazy import for optional image processing modules."""
    _handwriting_exports = {
        'detect_handwriting', 'detect_handwriting_regions',
        'mask_to_png', 'DetectionResult'
    }
    _inpainting_exports = {
        'inpaint_image', 'inpaint_opencv_telea', 'inpaint_opencv_ns',
        'remove_handwriting', 'check_lama_available',
        'InpaintingMethod', 'InpaintingResult'
    }
    _layout_exports = {
        'reconstruct_layout', 'layout_to_fabric_json', 'reconstruct_and_clean',
        'LayoutResult', 'TextElement', 'ElementType'
    }

    if name in _handwriting_exports:
        from . import handwriting_detection
        return getattr(handwriting_detection, name)
    elif name in _inpainting_exports:
        from . import inpainting_service
        return getattr(inpainting_service, name)
    elif name in _layout_exports:
        from . import layout_reconstruction_service
        return getattr(layout_reconstruction_service, name)

    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")


__all__ = [
    # Grading
    'calculate_grade_points',
    'calculate_raw_points',
    # Authentication
    'get_current_user',
    # Audit
    'log_audit',
    'log_eh_audit',
    # Handwriting Detection (lazy)
    'detect_handwriting',
    'detect_handwriting_regions',
    'mask_to_png',
    'DetectionResult',
    # Inpainting (lazy)
    'inpaint_image',
    'inpaint_opencv_telea',
    'inpaint_opencv_ns',
    'remove_handwriting',
    'check_lama_available',
    'InpaintingMethod',
    'InpaintingResult',
    # Layout Reconstruction (lazy)
    'reconstruct_layout',
    'layout_to_fabric_json',
    'reconstruct_and_clean',
    'LayoutResult',
    'TextElement',
    'ElementType',
]
