"""
Services Package - Core services layer for the cz-billing-generator.

This package contains foundational services that provide focused, single-responsibility
functionality to the rest of the application. Services are reusable across different
contexts (CLI, API, tests) and follow clean dependency injection patterns.

Services included:
- ConfigurationService: Handles all configuration loading and parsing
- DirectoryService: Manages run directories and file path operations
- DataService: Pure data loading and saving operations
- ConfigService: YAML configuration file handling (pipeline and upload configs)
- ParquetDataService: Specialized parquet operations for pipeline stages
- JsonlDataService: JSONL operations for CloudZero API uploads
- ConfigPartitioner: Break pipeline configs into minimal processing units
- ProcessingStrategyService: Optimal processing strategy selection

Architecture Notes:
- Services are foundational - pipeline depends on services, not vice versa
- Clean dependency flow: pipeline -> services -> utilities
- Each service has a single, well-defined responsibility
- Services can be composed and reused across different application contexts
"""

from .config_partitioner import ConfigPart, ConfigPartitioner, create_config_partitioner
from .config_service import ConfigService, ConfigurationError, create_config_service
from .configuration import (
    ConfigurationDefaults,
    ConfigurationPaths,
    ConfigurationService,
)
from .data import CompressionType, DataFileInfo, DataFormat, DataService, SaveOptions
from .directory import (
    DirectoryPaths,
    DirectoryService,
    RunDirectoryInfo,
    StageDirectoryInfo,
)
from .jsonl_data_service import JsonlDataService, create_jsonl_data_service
from .parquet_data_service import (
    ParquetDataService,
    ParquetSaveOptions,
    create_parquet_data_service,
)

# ValidationService removed - validation now handled inline during immediate write processing
from .processing_strategy import (
    CompressionStrategy,
    DataCharacteristics,
    PartitioningStrategy,
    ProcessingPreference,
    ProcessingStrategy,
    ProcessingStrategyService,
    StoragePolicy,
    StrategyConfiguration,
    StrategyRecommendation,
    SystemResources,
)

__all__ = [
    "ConfigurationService",
    "ConfigurationPaths",
    "ConfigurationDefaults",
    "DirectoryService",
    "DirectoryPaths",
    "RunDirectoryInfo",
    "StageDirectoryInfo",
    "DataService",
    "DataFormat",
    "CompressionType",
    "DataFileInfo",
    "SaveOptions",
    "ConfigService",
    "ConfigurationError",
    "create_config_service",
    "ParquetDataService",
    "ParquetSaveOptions",
    "create_parquet_data_service",
    "JsonlDataService",
    "create_jsonl_data_service",
    "ConfigPartitioner",
    "ConfigPart",
    "create_config_partitioner",
    "ProcessingStrategyService",
    "ProcessingStrategy",
    "CompressionStrategy",
    "PartitioningStrategy",
    "ProcessingPreference",
    "StoragePolicy",
    "SystemResources",
    "DataCharacteristics",
    "StrategyConfiguration",
    "StrategyRecommendation",
    # ValidationService exports removed - validation now handled inline
]
