from __future__ import annotations
from dataclasses import dataclass, field
from decimal import Decimal
from .access_feature_enumeration import AccessFeatureEnumeration
from .accessibility_assessment import AccessibilityAssessment
from .accessibility_assessment_ref import AccessibilityAssessmentRef
from .border_type_enumeration import BorderTypeEnumeration
from .covered_enumeration import CoveredEnumeration
from .flooring_status_enumeration import FlooringStatusEnumeration
from .flooring_type_enumeration import FlooringTypeEnumeration
from .gated_enumeration import GatedEnumeration
from .generic_path_link_version_structure import GenericPathLinkVersionStructure
from .gradient_enumeration import GradientEnumeration
from .lighting_enumeration import LightingEnumeration
from .multilingual_string import MultilingualString
from .passage_type_enumeration import PassageTypeEnumeration
from .path_direction_enumeration import PathDirectionEnumeration
from .public_use_enumeration import PublicUseEnumeration
from .site_path_link_end_structure import SitePathLinkEndStructure
from .tactile_guiding_strip_status_enumeration import TactileGuidingStripStatusEnumeration
from .tactile_warning_strip_enumeration import TactileWarningStripEnumeration
from .tilt_type_enumeration import TiltTypeEnumeration
from .transfer_duration_structure import TransferDurationStructure
from .transition_enumeration import TransitionEnumeration

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


@dataclass(slots=True, kw_only=True)
class OffSitePathLinkVersionStructure(GenericPathLinkVersionStructure):
    class Meta:
        name = "OffSitePathLink_VersionStructure"

    from_value: SitePathLinkEndStructure = field(
        metadata={
            "name": "From",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    to: SitePathLinkEndStructure = field(
        metadata={
            "name": "To",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    description: None | MultilingualString = field(
        default=None,
        metadata={
            "name": "Description",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    accessibility_assessment_ref_or_accessibility_assessment: None | AccessibilityAssessmentRef | AccessibilityAssessment = field(
        default=None,
        metadata={
            "type": "Elements",
            "choices": (
                {
                    "name": "AccessibilityAssessmentRef",
                    "type": AccessibilityAssessmentRef,
                    "namespace": "http://www.netex.org.uk/netex",
                },
                {
                    "name": "AccessibilityAssessment",
                    "type": AccessibilityAssessment,
                    "namespace": "http://www.netex.org.uk/netex",
                },
            ),
        }
    )
    public_use: None | PublicUseEnumeration = field(
        default=None,
        metadata={
            "name": "PublicUse",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    covered: None | CoveredEnumeration = field(
        default=None,
        metadata={
            "name": "Covered",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    gated: None | GatedEnumeration = field(
        default=None,
        metadata={
            "name": "Gated",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    lighting: None | LightingEnumeration = field(
        default=None,
        metadata={
            "name": "Lighting",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    all_areas_wheelchair_accessible: None | bool = field(
        default=None,
        metadata={
            "name": "AllAreasWheelchairAccessible",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    person_capacity: None | int = field(
        default=None,
        metadata={
            "name": "PersonCapacity",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    towards: None | MultilingualString = field(
        default=None,
        metadata={
            "name": "Towards",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    back: None | MultilingualString = field(
        default=None,
        metadata={
            "name": "Back",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    number_of_steps: None | int = field(
        default=None,
        metadata={
            "name": "NumberOfSteps",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    minimum_height: None | Decimal = field(
        default=None,
        metadata={
            "name": "MinimumHeight",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    minimum_width: None | Decimal = field(
        default=None,
        metadata={
            "name": "MinimumWidth",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    allowed_use: None | PathDirectionEnumeration = field(
        default=None,
        metadata={
            "name": "AllowedUse",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    transition: None | TransitionEnumeration = field(
        default=None,
        metadata={
            "name": "Transition",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    gradient: None | int = field(
        default=None,
        metadata={
            "name": "Gradient",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    gradient_type: None | GradientEnumeration = field(
        default=None,
        metadata={
            "name": "GradientType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    tilt_angle: None | int = field(
        default=None,
        metadata={
            "name": "TiltAngle",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    tilt_type: None | TiltTypeEnumeration = field(
        default=None,
        metadata={
            "name": "TiltType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    access_feature_type: None | AccessFeatureEnumeration = field(
        default=None,
        metadata={
            "name": "AccessFeatureType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    passage_type: None | PassageTypeEnumeration = field(
        default=None,
        metadata={
            "name": "PassageType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    flooring_type: None | FlooringTypeEnumeration = field(
        default=None,
        metadata={
            "name": "FlooringType",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    flooring_status: None | FlooringStatusEnumeration = field(
        default=None,
        metadata={
            "name": "FlooringStatus",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    right_side_border: None | BorderTypeEnumeration = field(
        default=None,
        metadata={
            "name": "RightSideBorder",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    left_side_border: None | BorderTypeEnumeration = field(
        default=None,
        metadata={
            "name": "LeftSideBorder",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    tactile_warning_strip: None | TactileWarningStripEnumeration = field(
        default=None,
        metadata={
            "name": "TactileWarningStrip",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    tactile_warning_strip_contrast: None | bool = field(
        default=None,
        metadata={
            "name": "TactileWarningStripContrast",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    tactile_guiding_strip: None | bool = field(
        default=None,
        metadata={
            "name": "TactileGuidingStrip",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    tactile_guiding_strip_status: None | TactileGuidingStripStatusEnumeration = field(
        default=None,
        metadata={
            "name": "TactileGuidingStripStatus",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    maximum_flow_per_minute: None | int = field(
        default=None,
        metadata={
            "name": "MaximumFlowPerMinute",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )
    transfer_duration: None | TransferDurationStructure = field(
        default=None,
        metadata={
            "name": "TransferDuration",
            "type": "Element",
            "namespace": "http://www.netex.org.uk/netex",
        }
    )