from __future__ import annotations
from dataclasses import dataclass, field
from xsdata.models.datatype import XmlDuration
from .data_name_spaces_structure import DataNameSpacesStructure
from .delivery_method_enumeration import DeliveryMethodEnumeration
from .empty_type_1 import EmptyType1
from .predictors_enumeration import PredictorsEnumeration

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


@dataclass(slots=True, kw_only=True)
class ServiceRequestContextStructure:
    check_status_address: None | str = field(
        default=None,
        metadata={
            "name": "CheckStatusAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    subscribe_address: None | str = field(
        default=None,
        metadata={
            "name": "SubscribeAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    manage_subscription_address: None | str = field(
        default=None,
        metadata={
            "name": "ManageSubscriptionAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    get_data_address: None | str = field(
        default=None,
        metadata={
            "name": "GetDataAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    status_response_address: None | str = field(
        default=None,
        metadata={
            "name": "StatusResponseAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    subscriber_address: None | str = field(
        default=None,
        metadata={
            "name": "SubscriberAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    notify_address: None | str = field(
        default=None,
        metadata={
            "name": "NotifyAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    consumer_address: None | str = field(
        default=None,
        metadata={
            "name": "ConsumerAddress",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    data_name_spaces: None | DataNameSpacesStructure = field(
        default=None,
        metadata={
            "name": "DataNameSpaces",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    language: None | str = field(
        default=None,
        metadata={
            "name": "Language",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    wgs_decimal_degrees_or_gml_coordinate_format: None | EmptyType1 | str = field(
        default=None,
        metadata={
            "type": "Elements",
            "choices": (
                {
                    "name": "WgsDecimalDegrees",
                    "type": EmptyType1,
                    "namespace": "http://www.siri.org.uk/siri",
                },
                {
                    "name": "GmlCoordinateFormat",
                    "type": str,
                    "namespace": "http://www.siri.org.uk/siri",
                },
            ),
        }
    )
    distance_units: None | str = field(
        default=None,
        metadata={
            "name": "DistanceUnits",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    velocity_units: None | str = field(
        default=None,
        metadata={
            "name": "VelocityUnits",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    data_horizon: None | XmlDuration = field(
        default=None,
        metadata={
            "name": "DataHorizon",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    request_timeout: None | XmlDuration = field(
        default=None,
        metadata={
            "name": "RequestTimeout",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    delivery_method: None | DeliveryMethodEnumeration = field(
        default=None,
        metadata={
            "name": "DeliveryMethod",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    multipart_despatch: None | bool = field(
        default=None,
        metadata={
            "name": "MultipartDespatch",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    confirm_delivery: None | bool = field(
        default=None,
        metadata={
            "name": "ConfirmDelivery",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    maximimum_number_of_subscriptions: None | int = field(
        default=None,
        metadata={
            "name": "MaximimumNumberOfSubscriptions",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    allowed_predictors: None | PredictorsEnumeration = field(
        default=None,
        metadata={
            "name": "AllowedPredictors",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )
    prediction_function: None | str = field(
        default=None,
        metadata={
            "name": "PredictionFunction",
            "type": "Element",
            "namespace": "http://www.siri.org.uk/siri",
        }
    )