"""FlexOHR — Flexible and Extensible Object for Harmony Representation."""

from flexohr.core.component import (
    UNDEFINED,
    AbsentComponent,
    Component,
    UndefinedComponent,
)
from flexohr.core.ohr import OHR, Where, WhereSet
from flexohr.core.protocol import FlexohrProtocol
from flexohr.core.sampler import OHRSampler, SamplerConfig
from flexohr.core.validators import (
    BodyNotEmpty,
    HasReference,
    InversionBassConsistency,
    MaxNestingDepth,
    NoContradictingToneFunctions,
    ValidationResult,
    Validator,
)
from flexohr.harmony.enums import (
    EMPTY_PROPS,
    CodecRegistry,
    ComponentStatus,
    FancyStrEnum,
    FrozenProperties,
    KeyValue,
    Source,
    props,
)

C = Component

__all__ = [
    # Core
    "Component",
    "C",
    "AbsentComponent",
    "UndefinedComponent",
    "UNDEFINED",
    "OHR",
    "Where",
    "WhereSet",
    "FlexohrProtocol",
    # Sampler
    "OHRSampler",
    "SamplerConfig",
    # Validators
    "Validator",
    "ValidationResult",
    "HasReference",
    "BodyNotEmpty",
    "InversionBassConsistency",
    "MaxNestingDepth",
    "NoContradictingToneFunctions",
    # Types
    "FancyStrEnum",
    "CodecRegistry",
    "ComponentStatus",
    "Source",
    "FrozenProperties",
    "KeyValue",
    "EMPTY_PROPS",
    "props",
]
