# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'DeviceDeviceProperty',
    'OrderContact',
    'OrderReturnTracking',
    'OrderShipmentAddress',
    'OrderShipmentHistory',
    'OrderShipmentTracking',
    'OrderStatus',
]

@pulumi.output_type
class DeviceDeviceProperty(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "configuredRoleTypes":
            suggest = "configured_role_types"
        elif key == "hcsVersion":
            suggest = "hcs_version"
        elif key == "nodeCount":
            suggest = "node_count"
        elif key == "serialNumber":
            suggest = "serial_number"
        elif key == "softwareVersion":
            suggest = "software_version"
        elif key == "timeZone":
            suggest = "time_zone"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in DeviceDeviceProperty. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        DeviceDeviceProperty.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        DeviceDeviceProperty.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 capacity: Optional[int] = None,
                 configured_role_types: Optional[Sequence[str]] = None,
                 culture: Optional[str] = None,
                 hcs_version: Optional[str] = None,
                 model: Optional[str] = None,
                 node_count: Optional[int] = None,
                 serial_number: Optional[str] = None,
                 software_version: Optional[str] = None,
                 status: Optional[str] = None,
                 time_zone: Optional[str] = None,
                 type: Optional[str] = None):
        """
        :param int capacity: The Data Box Edge/Gateway device local capacity in MB.
        :param Sequence[str] configured_role_types: Type of compute roles configured.
        :param str culture: The Data Box Edge/Gateway device culture.
        :param str hcs_version: The device software version number of the device (eg: 1.2.18105.6).
        :param str model: The Data Box Edge/Gateway device model.
        :param int node_count: The number of nodes in the cluster.
        :param str serial_number: The Serial Number of Data Box Edge/Gateway device.
        :param str software_version: The Data Box Edge/Gateway device software version.
        :param str status: The status of the Data Box Edge/Gateway device.
        :param str time_zone: The Data Box Edge/Gateway device timezone.
        :param str type: The type of the Data Box Edge/Gateway device.
        """
        if capacity is not None:
            pulumi.set(__self__, "capacity", capacity)
        if configured_role_types is not None:
            pulumi.set(__self__, "configured_role_types", configured_role_types)
        if culture is not None:
            pulumi.set(__self__, "culture", culture)
        if hcs_version is not None:
            pulumi.set(__self__, "hcs_version", hcs_version)
        if model is not None:
            pulumi.set(__self__, "model", model)
        if node_count is not None:
            pulumi.set(__self__, "node_count", node_count)
        if serial_number is not None:
            pulumi.set(__self__, "serial_number", serial_number)
        if software_version is not None:
            pulumi.set(__self__, "software_version", software_version)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if time_zone is not None:
            pulumi.set(__self__, "time_zone", time_zone)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @property
    @pulumi.getter
    def capacity(self) -> Optional[int]:
        """
        The Data Box Edge/Gateway device local capacity in MB.
        """
        return pulumi.get(self, "capacity")

    @property
    @pulumi.getter(name="configuredRoleTypes")
    def configured_role_types(self) -> Optional[Sequence[str]]:
        """
        Type of compute roles configured.
        """
        return pulumi.get(self, "configured_role_types")

    @property
    @pulumi.getter
    def culture(self) -> Optional[str]:
        """
        The Data Box Edge/Gateway device culture.
        """
        return pulumi.get(self, "culture")

    @property
    @pulumi.getter(name="hcsVersion")
    def hcs_version(self) -> Optional[str]:
        """
        The device software version number of the device (eg: 1.2.18105.6).
        """
        return pulumi.get(self, "hcs_version")

    @property
    @pulumi.getter
    def model(self) -> Optional[str]:
        """
        The Data Box Edge/Gateway device model.
        """
        return pulumi.get(self, "model")

    @property
    @pulumi.getter(name="nodeCount")
    def node_count(self) -> Optional[int]:
        """
        The number of nodes in the cluster.
        """
        return pulumi.get(self, "node_count")

    @property
    @pulumi.getter(name="serialNumber")
    def serial_number(self) -> Optional[str]:
        """
        The Serial Number of Data Box Edge/Gateway device.
        """
        return pulumi.get(self, "serial_number")

    @property
    @pulumi.getter(name="softwareVersion")
    def software_version(self) -> Optional[str]:
        """
        The Data Box Edge/Gateway device software version.
        """
        return pulumi.get(self, "software_version")

    @property
    @pulumi.getter
    def status(self) -> Optional[str]:
        """
        The status of the Data Box Edge/Gateway device.
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="timeZone")
    def time_zone(self) -> Optional[str]:
        """
        The Data Box Edge/Gateway device timezone.
        """
        return pulumi.get(self, "time_zone")

    @property
    @pulumi.getter
    def type(self) -> Optional[str]:
        """
        The type of the Data Box Edge/Gateway device.
        """
        return pulumi.get(self, "type")


@pulumi.output_type
class OrderContact(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "companyName":
            suggest = "company_name"
        elif key == "phoneNumber":
            suggest = "phone_number"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrderContact. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrderContact.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrderContact.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 company_name: str,
                 emails: Sequence[str],
                 name: str,
                 phone_number: str):
        """
        :param str company_name: The name of the company. Changing this forces a new Databox Edge Order to be created.
        :param Sequence[str] emails: A list of email address to send order notification to. Changing this forces a new Databox Edge Order to be created.
        :param str name: The contact person name. Changing this forces a new Databox Edge Order to be created.
        :param str phone_number: The phone number. Changing this forces a new Databox Edge Order to be created.
        """
        pulumi.set(__self__, "company_name", company_name)
        pulumi.set(__self__, "emails", emails)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "phone_number", phone_number)

    @property
    @pulumi.getter(name="companyName")
    def company_name(self) -> str:
        """
        The name of the company. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "company_name")

    @property
    @pulumi.getter
    def emails(self) -> Sequence[str]:
        """
        A list of email address to send order notification to. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "emails")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The contact person name. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="phoneNumber")
    def phone_number(self) -> str:
        """
        The phone number. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "phone_number")


@pulumi.output_type
class OrderReturnTracking(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "carrierName":
            suggest = "carrier_name"
        elif key == "serialNumber":
            suggest = "serial_number"
        elif key == "trackingId":
            suggest = "tracking_id"
        elif key == "trackingUrl":
            suggest = "tracking_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrderReturnTracking. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrderReturnTracking.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrderReturnTracking.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 carrier_name: Optional[str] = None,
                 serial_number: Optional[str] = None,
                 tracking_id: Optional[str] = None,
                 tracking_url: Optional[str] = None):
        """
        :param str carrier_name: Name of the carrier used in the delivery.
        :param str serial_number: Serial number of the device being tracked.
        :param str tracking_id: The ID of the tracking.
        :param str tracking_url: Tracking URL of the shipment.
        """
        if carrier_name is not None:
            pulumi.set(__self__, "carrier_name", carrier_name)
        if serial_number is not None:
            pulumi.set(__self__, "serial_number", serial_number)
        if tracking_id is not None:
            pulumi.set(__self__, "tracking_id", tracking_id)
        if tracking_url is not None:
            pulumi.set(__self__, "tracking_url", tracking_url)

    @property
    @pulumi.getter(name="carrierName")
    def carrier_name(self) -> Optional[str]:
        """
        Name of the carrier used in the delivery.
        """
        return pulumi.get(self, "carrier_name")

    @property
    @pulumi.getter(name="serialNumber")
    def serial_number(self) -> Optional[str]:
        """
        Serial number of the device being tracked.
        """
        return pulumi.get(self, "serial_number")

    @property
    @pulumi.getter(name="trackingId")
    def tracking_id(self) -> Optional[str]:
        """
        The ID of the tracking.
        """
        return pulumi.get(self, "tracking_id")

    @property
    @pulumi.getter(name="trackingUrl")
    def tracking_url(self) -> Optional[str]:
        """
        Tracking URL of the shipment.
        """
        return pulumi.get(self, "tracking_url")


@pulumi.output_type
class OrderShipmentAddress(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "postalCode":
            suggest = "postal_code"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrderShipmentAddress. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrderShipmentAddress.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrderShipmentAddress.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 addresses: Sequence[str],
                 city: str,
                 country: str,
                 postal_code: str,
                 state: str):
        """
        :param Sequence[str] addresses: The list of upto 3 lines for address information. Changing this forces a new Databox Edge Order to be created.
        :param str city: The city name. Changing this forces a new Databox Edge Order to be created.
        :param str country: The name of the country to ship the Databox Edge Device to. Valid values are "Algeria", "Argentina", "Australia", "Austria", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belgium", "Bermuda", "Bolivia", "Bosnia and Herzegovina", "Brazil", "Bulgaria", "Canada", "Cayman Islands", "Chile", "Colombia", "Costa Rica", "Croatia", "Cyprus", "Czechia", "CÃ´te D'ivoire", "Denmark", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Estonia", "Ethiopia", "Finland", "France", "Georgia", "Germany", "Ghana", "Greece", "Guatemala", "Honduras", "Hong Kong SAR", "Hungary", "Iceland", "India", "Indonesia", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kuwait", "Kyrgyzstan", "Latvia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao SAR", "Malaysia", "Malta", "Mauritius", "Mexico", "Moldova", "Monaco", "Mongolia", "Montenegro", "Morocco", "Namibia", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Nigeria", "Norway", "Oman", "Pakistan", "Palestinian Authority", "Panama", "Paraguay", "Peru", "Philippines", "Poland", "Portugal", "Puerto Rico", "Qatar", "Republic of Korea", "Romania", "Russia", "Rwanda", "Saint Kitts And Nevis", "Saudi Arabia", "Senegal", "Serbia", "Singapore", "Slovakia", "Slovenia", "South Africa", "Spain", "Sri Lanka", "Sweden", "Switzerland", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Trinidad And Tobago", "Tunisia", "Turkey", "Turkmenistan", "U.S. Virgin Islands", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Venezuela", "Vietnam", "Yemen", "Zambia" or "Zimbabwe". Changing this forces a new Databox Edge Order to be created.
        :param str postal_code: The postal code. Changing this forces a new Databox Edge Order to be created.
        :param str state: The name of the state to ship the Databox Edge Device to. Changing this forces a new Databox Edge Order to be created.
        """
        pulumi.set(__self__, "addresses", addresses)
        pulumi.set(__self__, "city", city)
        pulumi.set(__self__, "country", country)
        pulumi.set(__self__, "postal_code", postal_code)
        pulumi.set(__self__, "state", state)

    @property
    @pulumi.getter
    def addresses(self) -> Sequence[str]:
        """
        The list of upto 3 lines for address information. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "addresses")

    @property
    @pulumi.getter
    def city(self) -> str:
        """
        The city name. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "city")

    @property
    @pulumi.getter
    def country(self) -> str:
        """
        The name of the country to ship the Databox Edge Device to. Valid values are "Algeria", "Argentina", "Australia", "Austria", "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belgium", "Bermuda", "Bolivia", "Bosnia and Herzegovina", "Brazil", "Bulgaria", "Canada", "Cayman Islands", "Chile", "Colombia", "Costa Rica", "Croatia", "Cyprus", "Czechia", "CÃ´te D'ivoire", "Denmark", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Estonia", "Ethiopia", "Finland", "France", "Georgia", "Germany", "Ghana", "Greece", "Guatemala", "Honduras", "Hong Kong SAR", "Hungary", "Iceland", "India", "Indonesia", "Ireland", "Israel", "Italy", "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kuwait", "Kyrgyzstan", "Latvia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao SAR", "Malaysia", "Malta", "Mauritius", "Mexico", "Moldova", "Monaco", "Mongolia", "Montenegro", "Morocco", "Namibia", "Nepal", "Netherlands", "New Zealand", "Nicaragua", "Nigeria", "Norway", "Oman", "Pakistan", "Palestinian Authority", "Panama", "Paraguay", "Peru", "Philippines", "Poland", "Portugal", "Puerto Rico", "Qatar", "Republic of Korea", "Romania", "Russia", "Rwanda", "Saint Kitts And Nevis", "Saudi Arabia", "Senegal", "Serbia", "Singapore", "Slovakia", "Slovenia", "South Africa", "Spain", "Sri Lanka", "Sweden", "Switzerland", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Trinidad And Tobago", "Tunisia", "Turkey", "Turkmenistan", "U.S. Virgin Islands", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "Uruguay", "Uzbekistan", "Venezuela", "Vietnam", "Yemen", "Zambia" or "Zimbabwe". Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "country")

    @property
    @pulumi.getter(name="postalCode")
    def postal_code(self) -> str:
        """
        The postal code. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "postal_code")

    @property
    @pulumi.getter
    def state(self) -> str:
        """
        The name of the state to ship the Databox Edge Device to. Changing this forces a new Databox Edge Order to be created.
        """
        return pulumi.get(self, "state")


@pulumi.output_type
class OrderShipmentHistory(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalDetails":
            suggest = "additional_details"
        elif key == "lastUpdate":
            suggest = "last_update"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrderShipmentHistory. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrderShipmentHistory.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrderShipmentHistory.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_details: Optional[Mapping[str, str]] = None,
                 comments: Optional[str] = None,
                 last_update: Optional[str] = None):
        """
        :param Mapping[str, str] additional_details: Dictionary to hold generic information which is not stored by the already existing properties.
        :param str comments: Comments related to this status change.
        :param str last_update: Time of status update.
        """
        if additional_details is not None:
            pulumi.set(__self__, "additional_details", additional_details)
        if comments is not None:
            pulumi.set(__self__, "comments", comments)
        if last_update is not None:
            pulumi.set(__self__, "last_update", last_update)

    @property
    @pulumi.getter(name="additionalDetails")
    def additional_details(self) -> Optional[Mapping[str, str]]:
        """
        Dictionary to hold generic information which is not stored by the already existing properties.
        """
        return pulumi.get(self, "additional_details")

    @property
    @pulumi.getter
    def comments(self) -> Optional[str]:
        """
        Comments related to this status change.
        """
        return pulumi.get(self, "comments")

    @property
    @pulumi.getter(name="lastUpdate")
    def last_update(self) -> Optional[str]:
        """
        Time of status update.
        """
        return pulumi.get(self, "last_update")


@pulumi.output_type
class OrderShipmentTracking(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "carrierName":
            suggest = "carrier_name"
        elif key == "serialNumber":
            suggest = "serial_number"
        elif key == "trackingId":
            suggest = "tracking_id"
        elif key == "trackingUrl":
            suggest = "tracking_url"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrderShipmentTracking. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrderShipmentTracking.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrderShipmentTracking.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 carrier_name: Optional[str] = None,
                 serial_number: Optional[str] = None,
                 tracking_id: Optional[str] = None,
                 tracking_url: Optional[str] = None):
        """
        :param str carrier_name: Name of the carrier used in the delivery.
        :param str serial_number: Serial number of the device being tracked.
        :param str tracking_id: The ID of the tracking.
        :param str tracking_url: Tracking URL of the shipment.
        """
        if carrier_name is not None:
            pulumi.set(__self__, "carrier_name", carrier_name)
        if serial_number is not None:
            pulumi.set(__self__, "serial_number", serial_number)
        if tracking_id is not None:
            pulumi.set(__self__, "tracking_id", tracking_id)
        if tracking_url is not None:
            pulumi.set(__self__, "tracking_url", tracking_url)

    @property
    @pulumi.getter(name="carrierName")
    def carrier_name(self) -> Optional[str]:
        """
        Name of the carrier used in the delivery.
        """
        return pulumi.get(self, "carrier_name")

    @property
    @pulumi.getter(name="serialNumber")
    def serial_number(self) -> Optional[str]:
        """
        Serial number of the device being tracked.
        """
        return pulumi.get(self, "serial_number")

    @property
    @pulumi.getter(name="trackingId")
    def tracking_id(self) -> Optional[str]:
        """
        The ID of the tracking.
        """
        return pulumi.get(self, "tracking_id")

    @property
    @pulumi.getter(name="trackingUrl")
    def tracking_url(self) -> Optional[str]:
        """
        Tracking URL of the shipment.
        """
        return pulumi.get(self, "tracking_url")


@pulumi.output_type
class OrderStatus(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "additionalDetails":
            suggest = "additional_details"
        elif key == "lastUpdate":
            suggest = "last_update"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in OrderStatus. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        OrderStatus.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        OrderStatus.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 additional_details: Optional[Mapping[str, str]] = None,
                 comments: Optional[str] = None,
                 info: Optional[str] = None,
                 last_update: Optional[str] = None):
        """
        :param Mapping[str, str] additional_details: Dictionary to hold generic information which is not stored by the already existing properties.
        :param str comments: Comments related to this status change.
        :param str info: The current status of the order. Possible values include `Untracked`, `AwaitingFulfilment`, `AwaitingPreparation`, `AwaitingShipment`, `Shipped`, `Arriving`, `Delivered`, `ReplacementRequested`, `LostDevice`, `Declined`, `ReturnInitiated`, `AwaitingReturnShipment`, `ShippedBack` or `CollectedAtMicrosoft`.
        :param str last_update: Time of status update.
        """
        if additional_details is not None:
            pulumi.set(__self__, "additional_details", additional_details)
        if comments is not None:
            pulumi.set(__self__, "comments", comments)
        if info is not None:
            pulumi.set(__self__, "info", info)
        if last_update is not None:
            pulumi.set(__self__, "last_update", last_update)

    @property
    @pulumi.getter(name="additionalDetails")
    def additional_details(self) -> Optional[Mapping[str, str]]:
        """
        Dictionary to hold generic information which is not stored by the already existing properties.
        """
        return pulumi.get(self, "additional_details")

    @property
    @pulumi.getter
    def comments(self) -> Optional[str]:
        """
        Comments related to this status change.
        """
        return pulumi.get(self, "comments")

    @property
    @pulumi.getter
    def info(self) -> Optional[str]:
        """
        The current status of the order. Possible values include `Untracked`, `AwaitingFulfilment`, `AwaitingPreparation`, `AwaitingShipment`, `Shipped`, `Arriving`, `Delivered`, `ReplacementRequested`, `LostDevice`, `Declined`, `ReturnInitiated`, `AwaitingReturnShipment`, `ShippedBack` or `CollectedAtMicrosoft`.
        """
        return pulumi.get(self, "info")

    @property
    @pulumi.getter(name="lastUpdate")
    def last_update(self) -> Optional[str]:
        """
        Time of status update.
        """
        return pulumi.get(self, "last_update")


