from __future__ import annotations
from dataclasses import dataclass, field
from .access_leg_ref import AccessLegRef
from .alternative_mode_leg_ref import AlternativeModeLegRef
from .individual_traveller_ref import IndividualTravellerRef
from .private_leg_ref import PrivateLegRef
from .pt_connection_leg_ref import PtConnectionLegRef
from .pt_ride_leg_ref import PtRideLegRef
from .trip_leg_ref import TripLegRef
from .trip_pattern_ref import TripPatternRef
from .trip_ref import TripRef
from .validity_parameter_assignment_version_structure import ValidityParameterAssignmentVersionStructure
from .vehicle_pooling_driver_info_ref import VehiclePoolingDriverInfoRef

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


@dataclass(slots=True, kw_only=True)
class CustomerPurchaseParameterAssignmentVersionStructure(ValidityParameterAssignmentVersionStructure):
    class Meta:
        name = "CustomerPurchaseParameterAssignment_VersionStructure"

    individual_traveller_ref: None | IndividualTravellerRef = field(
        default=None,
        metadata={
            "name": "IndividualTravellerRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    vehicle_pooling_driver_info_ref: None | VehiclePoolingDriverInfoRef = field(
        default=None,
        metadata={
            "name": "VehiclePoolingDriverInfoRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    trip_pattern_ref: None | TripPatternRef = field(
        default=None,
        metadata={
            "name": "TripPatternRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    trip_ref: None | TripRef = field(
        default=None,
        metadata={
            "name": "TripRef",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    transfer_leg_ref_or_leg_ref_or_ride_leg_ref: None | AccessLegRef | PtConnectionLegRef | PrivateLegRef | AlternativeModeLegRef | PtRideLegRef | TripLegRef = field(
        default=None,
        metadata={
            "type": "Elements",
            "choices": (
                {
                    "name": "AccessLegRef",
                    "type": AccessLegRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PtConnectionLegRef",
                    "type": PtConnectionLegRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PrivateLegRef",
                    "type": PrivateLegRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "AlternativeModeLegRef",
                    "type": AlternativeModeLegRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "PtRideLegRef",
                    "type": PtRideLegRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "TripLegRef",
                    "type": TripLegRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
            ),
        }
    )