from __future__ import annotations
from dataclasses import dataclass, field
from .compound_train_ref import CompoundTrainRef
from .entity_in_version_structure import VersionedChildStructure
from .multilingual_string import MultilingualString
from .powered_train import PoweredTrain
from .powered_train_ref import PoweredTrainRef
from .train import Train
from .train_element_type_dummy import TrainElementTypeDummy
from .train_ref import TrainRef
from .unpowered_train import UnpoweredTrain
from .unpowered_train_ref import UnpoweredTrainRef
from .vehicle_orientation_enumeration import VehicleOrientationEnumeration

__NAMESPACE__ = "http://www.netex.org.uk/netex"


@dataclass(slots=True, kw_only=True)
class TrainInCompoundTrainVersionedChildStructure(VersionedChildStructure):
    class Meta:
        name = "TrainInCompoundTrain_VersionedChildStructure"

    description: None | MultilingualString = field(
        default=None,
        metadata={
            "name": "Description",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    compound_train_ref: None | CompoundTrainRef = field(
        default=None,
        metadata={
            "name": "CompoundTrainRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    unpowered_train_ref_or_powered_train_ref_or_train_ref_or_unpowered_train_or_powered_train_or_train_or_train_element_type_dummy: None | UnpoweredTrainRef | PoweredTrainRef | TrainRef | UnpoweredTrain | PoweredTrain | Train | TrainElementTypeDummy = field(
        default=None,
        metadata={
            "type": "Elements",
            "choices": (
                {
                    "name": "UnpoweredTrainRef",
                    "type": UnpoweredTrainRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PoweredTrainRef",
                    "type": PoweredTrainRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TrainRef",
                    "type": TrainRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "UnpoweredTrain",
                    "type": UnpoweredTrain,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PoweredTrain",
                    "type": PoweredTrain,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "Train",
                    "type": Train,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TrainElementType_Dummy",
                    "type": TrainElementTypeDummy,
                    "namespace": "http://www.netex.org.uk/netex",
                },
            ),
        }
    )
    label: None | MultilingualString = field(
        default=None,
        metadata={
            "name": "Label",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    operational_orientation: None | VehicleOrientationEnumeration = field(
        default=None,
        metadata={
            "name": "OperationalOrientation",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    reversed_orientation: None | bool = field(
        default=None,
        metadata={
            "name": "ReversedOrientation",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    order: None | int = field(
        default=None,
        metadata={
            "type": "Attribute",
        }
    )