"""
Core generation components for the generate package.

Provides the essential building blocks for generating billing data:
- Reference data filtering and validation
- Resource generation with deterministic UIDs
- Time series and resource merging
- Memory estimation and job splitting utilities
"""

from .filter_reference_data import (
    apply_filters,
    validate_filter_structure,
    validate_filtered_groups,
    load_reference_data_for_job,
    estimate_record_count_after_filtering,
    ReferenceDataValidationError,
    FilterValidationError,
)

from .generate_resources import (
    generate_resources,
    generate_resources_batch,
    generate_deterministic_uid,
    get_deterministic_subscription,
    get_deterministic_project,
    get_deterministic_ancestry,
)

from .merge_resources_and_time import (
    merge_resources_with_time_series,
    estimate_memory_usage,
    should_split_job,
)

from .job_splitting import (
    split_job_by_date_range,
    group_jobs_by_month,
    validate_job_splits,
    JobSplitter,
    calculate_hours_in_date_range,
    estimate_job_memory_usage,
)

from .line_item_tracking import (
    LineItemTracker,
    LineItemStats,
    ProviderStats,
)

__all__ = [
    # Filter reference data
    "apply_filters",
    "validate_filter_structure", 
    "validate_filtered_groups",
    "load_reference_data_for_job",
    "estimate_record_count_after_filtering",
    "ReferenceDataValidationError",
    "FilterValidationError",
    
    # Generate resources
    "generate_resources",
    "generate_resources_batch",
    "generate_deterministic_uid",
    "get_deterministic_subscription",
    "get_deterministic_project", 
    "get_deterministic_ancestry",
    
    # Merge resources and time
    "merge_resources_with_time_series",
    "estimate_memory_usage",
    "should_split_job",
    
    # Job splitting
    "split_job_by_date_range",
    "group_jobs_by_month",
    "validate_job_splits",
    "JobSplitter",
    "calculate_hours_in_date_range",
    "estimate_job_memory_usage",
    
    # Line item tracking
    "LineItemTracker",
    "LineItemStats",
    "ProviderStats",
]