# 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 copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['SpacecraftArgs', 'Spacecraft']

@pulumi.input_type
class SpacecraftArgs:
    def __init__(__self__, *,
                 links: pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]],
                 norad_id: pulumi.Input[str],
                 resource_group_name: pulumi.Input[str],
                 title_line: pulumi.Input[str],
                 two_line_elements: pulumi.Input[Sequence[pulumi.Input[str]]],
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None):
        """
        The set of arguments for constructing a Spacecraft resource.
        :param pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]] links: A `links` block as defined below.
        :param pulumi.Input[str] norad_id: NORAD ID of the Spacecraft.
        :param pulumi.Input[str] resource_group_name: The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] title_line: Title of the two line elements(TLE).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] two_line_elements: A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        :param pulumi.Input[str] location: The location where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] name: Name of the link. Changing this forces a new resource to be created.
        """
        pulumi.set(__self__, "links", links)
        pulumi.set(__self__, "norad_id", norad_id)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "title_line", title_line)
        pulumi.set(__self__, "two_line_elements", two_line_elements)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter
    def links(self) -> pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]]:
        """
        A `links` block as defined below.
        """
        return pulumi.get(self, "links")

    @links.setter
    def links(self, value: pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]]):
        pulumi.set(self, "links", value)

    @property
    @pulumi.getter(name="noradId")
    def norad_id(self) -> pulumi.Input[str]:
        """
        NORAD ID of the Spacecraft.
        """
        return pulumi.get(self, "norad_id")

    @norad_id.setter
    def norad_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "norad_id", value)

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Input[str]:
        """
        The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_name")

    @resource_group_name.setter
    def resource_group_name(self, value: pulumi.Input[str]):
        pulumi.set(self, "resource_group_name", value)

    @property
    @pulumi.getter(name="titleLine")
    def title_line(self) -> pulumi.Input[str]:
        """
        Title of the two line elements(TLE).
        """
        return pulumi.get(self, "title_line")

    @title_line.setter
    def title_line(self, value: pulumi.Input[str]):
        pulumi.set(self, "title_line", value)

    @property
    @pulumi.getter(name="twoLineElements")
    def two_line_elements(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        """
        A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        """
        return pulumi.get(self, "two_line_elements")

    @two_line_elements.setter
    def two_line_elements(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "two_line_elements", value)

    @property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[str]]:
        """
        The location where the Spacecraft exists. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "location")

    @location.setter
    def location(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "location", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the link. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "tags", value)


@pulumi.input_type
class _SpacecraftState:
    def __init__(__self__, *,
                 links: Optional[pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 norad_id: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 title_line: Optional[pulumi.Input[str]] = None,
                 two_line_elements: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        Input properties used for looking up and filtering Spacecraft resources.
        :param pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]] links: A `links` block as defined below.
        :param pulumi.Input[str] location: The location where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] name: Name of the link. Changing this forces a new resource to be created.
        :param pulumi.Input[str] norad_id: NORAD ID of the Spacecraft.
        :param pulumi.Input[str] resource_group_name: The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] title_line: Title of the two line elements(TLE).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] two_line_elements: A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        """
        if links is not None:
            pulumi.set(__self__, "links", links)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if norad_id is not None:
            pulumi.set(__self__, "norad_id", norad_id)
        if resource_group_name is not None:
            pulumi.set(__self__, "resource_group_name", resource_group_name)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if title_line is not None:
            pulumi.set(__self__, "title_line", title_line)
        if two_line_elements is not None:
            pulumi.set(__self__, "two_line_elements", two_line_elements)

    @property
    @pulumi.getter
    def links(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]]]:
        """
        A `links` block as defined below.
        """
        return pulumi.get(self, "links")

    @links.setter
    def links(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SpacecraftLinkArgs']]]]):
        pulumi.set(self, "links", value)

    @property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[str]]:
        """
        The location where the Spacecraft exists. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "location")

    @location.setter
    def location(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "location", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        """
        Name of the link. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="noradId")
    def norad_id(self) -> Optional[pulumi.Input[str]]:
        """
        NORAD ID of the Spacecraft.
        """
        return pulumi.get(self, "norad_id")

    @norad_id.setter
    def norad_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "norad_id", value)

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> Optional[pulumi.Input[str]]:
        """
        The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_name")

    @resource_group_name.setter
    def resource_group_name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "resource_group_name", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="titleLine")
    def title_line(self) -> Optional[pulumi.Input[str]]:
        """
        Title of the two line elements(TLE).
        """
        return pulumi.get(self, "title_line")

    @title_line.setter
    def title_line(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "title_line", value)

    @property
    @pulumi.getter(name="twoLineElements")
    def two_line_elements(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        """
        return pulumi.get(self, "two_line_elements")

    @two_line_elements.setter
    def two_line_elements(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "two_line_elements", value)


class Spacecraft(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 links: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SpacecraftLinkArgs']]]]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 norad_id: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 title_line: Optional[pulumi.Input[str]] = None,
                 two_line_elements: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 __props__=None):
        """
        Manages a Spacecraft.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_azure as azure

        example_resource_group = azure.core.ResourceGroup("exampleResourceGroup", location="West Europe")
        example_spacecraft = azure.orbital.Spacecraft("exampleSpacecraft",
            resource_group_name=azurerm_resource_group["test"]["name"],
            location="westeurope",
            norad_id="12345",
            links=[azure.orbital.SpacecraftLinkArgs(
                bandwidth_mhz=100,
                center_frequency_mhz=101,
                direction="Uplink",
                polarization="LHCP",
                name="examplename",
            )],
            two_line_elements=[
                "1 23455U 94089A   97320.90946019  .00000140  00000-0  10191-3 0  2621",
                "2 23455  99.0090 272.6745 0008546 223.1686 136.8816 14.11711747148495",
            ],
            title_line="AQUA",
            tags={
                "aks-managed-cluster-name": "9a57225d-a405-4d40-aa46-f13d2342abef",
            })
        ```

        ## Import

        Spacecraft can be imported using the `resource id`, e.g.

        ```sh
         $ pulumi import azure:orbital/spacecraft:Spacecraft example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Orbital/spacecrafts/spacecraft1
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SpacecraftLinkArgs']]]] links: A `links` block as defined below.
        :param pulumi.Input[str] location: The location where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] name: Name of the link. Changing this forces a new resource to be created.
        :param pulumi.Input[str] norad_id: NORAD ID of the Spacecraft.
        :param pulumi.Input[str] resource_group_name: The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] title_line: Title of the two line elements(TLE).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] two_line_elements: A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: SpacecraftArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Manages a Spacecraft.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_azure as azure

        example_resource_group = azure.core.ResourceGroup("exampleResourceGroup", location="West Europe")
        example_spacecraft = azure.orbital.Spacecraft("exampleSpacecraft",
            resource_group_name=azurerm_resource_group["test"]["name"],
            location="westeurope",
            norad_id="12345",
            links=[azure.orbital.SpacecraftLinkArgs(
                bandwidth_mhz=100,
                center_frequency_mhz=101,
                direction="Uplink",
                polarization="LHCP",
                name="examplename",
            )],
            two_line_elements=[
                "1 23455U 94089A   97320.90946019  .00000140  00000-0  10191-3 0  2621",
                "2 23455  99.0090 272.6745 0008546 223.1686 136.8816 14.11711747148495",
            ],
            title_line="AQUA",
            tags={
                "aks-managed-cluster-name": "9a57225d-a405-4d40-aa46-f13d2342abef",
            })
        ```

        ## Import

        Spacecraft can be imported using the `resource id`, e.g.

        ```sh
         $ pulumi import azure:orbital/spacecraft:Spacecraft example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Orbital/spacecrafts/spacecraft1
        ```

        :param str resource_name: The name of the resource.
        :param SpacecraftArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(SpacecraftArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 links: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SpacecraftLinkArgs']]]]] = None,
                 location: Optional[pulumi.Input[str]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 norad_id: Optional[pulumi.Input[str]] = None,
                 resource_group_name: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                 title_line: Optional[pulumi.Input[str]] = None,
                 two_line_elements: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = SpacecraftArgs.__new__(SpacecraftArgs)

            if links is None and not opts.urn:
                raise TypeError("Missing required property 'links'")
            __props__.__dict__["links"] = links
            __props__.__dict__["location"] = location
            __props__.__dict__["name"] = name
            if norad_id is None and not opts.urn:
                raise TypeError("Missing required property 'norad_id'")
            __props__.__dict__["norad_id"] = norad_id
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            __props__.__dict__["tags"] = tags
            if title_line is None and not opts.urn:
                raise TypeError("Missing required property 'title_line'")
            __props__.__dict__["title_line"] = title_line
            if two_line_elements is None and not opts.urn:
                raise TypeError("Missing required property 'two_line_elements'")
            __props__.__dict__["two_line_elements"] = two_line_elements
        super(Spacecraft, __self__).__init__(
            'azure:orbital/spacecraft:Spacecraft',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            links: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SpacecraftLinkArgs']]]]] = None,
            location: Optional[pulumi.Input[str]] = None,
            name: Optional[pulumi.Input[str]] = None,
            norad_id: Optional[pulumi.Input[str]] = None,
            resource_group_name: Optional[pulumi.Input[str]] = None,
            tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
            title_line: Optional[pulumi.Input[str]] = None,
            two_line_elements: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None) -> 'Spacecraft':
        """
        Get an existing Spacecraft resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SpacecraftLinkArgs']]]] links: A `links` block as defined below.
        :param pulumi.Input[str] location: The location where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] name: Name of the link. Changing this forces a new resource to be created.
        :param pulumi.Input[str] norad_id: NORAD ID of the Spacecraft.
        :param pulumi.Input[str] resource_group_name: The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        :param pulumi.Input[str] title_line: Title of the two line elements(TLE).
        :param pulumi.Input[Sequence[pulumi.Input[str]]] two_line_elements: A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _SpacecraftState.__new__(_SpacecraftState)

        __props__.__dict__["links"] = links
        __props__.__dict__["location"] = location
        __props__.__dict__["name"] = name
        __props__.__dict__["norad_id"] = norad_id
        __props__.__dict__["resource_group_name"] = resource_group_name
        __props__.__dict__["tags"] = tags
        __props__.__dict__["title_line"] = title_line
        __props__.__dict__["two_line_elements"] = two_line_elements
        return Spacecraft(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter
    def links(self) -> pulumi.Output[Sequence['outputs.SpacecraftLink']]:
        """
        A `links` block as defined below.
        """
        return pulumi.get(self, "links")

    @property
    @pulumi.getter
    def location(self) -> pulumi.Output[str]:
        """
        The location where the Spacecraft exists. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "location")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        """
        Name of the link. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="noradId")
    def norad_id(self) -> pulumi.Output[str]:
        """
        NORAD ID of the Spacecraft.
        """
        return pulumi.get(self, "norad_id")

    @property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Output[str]:
        """
        The name of the Resource Group where the Spacecraft exists. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_name")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="titleLine")
    def title_line(self) -> pulumi.Output[str]:
        """
        Title of the two line elements(TLE).
        """
        return pulumi.get(self, "title_line")

    @property
    @pulumi.getter(name="twoLineElements")
    def two_line_elements(self) -> pulumi.Output[Sequence[str]]:
        """
        A list of the two line elements(TLE), the first string in the list is the first line of TLE, the second one is the second line of TLE.
        """
        return pulumi.get(self, "two_line_elements")

