# coding: utf-8

# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------


# TEST SCENARIO COVERAGE
# ----------------------
# Methods Total   : 6
# Methods Covered : 6
# Examples Total  : 6
# Examples Tested : 6
# Coverage %      : 100
# ----------------------

#  nat_gateways: 6/6

import unittest

import azure.mgmt.network
from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy
import pytest

AZURE_LOCATION = "eastus"


@pytest.mark.live_test_only
class TestMgmtNetwork(AzureMgmtRecordedTestCase):

    def setup_method(self, method):
        self.mgmt_client = self.create_mgmt_client(azure.mgmt.network.NetworkManagementClient)

    def create_public_ip_addresses(self, group_name, location, public_ip_name):
        # Create PublicIP
        BODY = {
            "location": location,
            "public_ip_allocation_method": "Static",
            "idle_timeout_in_minutes": 4,
            "sku": {"name": "Standard"},
        }
        result = self.mgmt_client.public_ip_addresses.begin_create_or_update(group_name, public_ip_name, BODY)
        return result.result()

    def create_public_ip_prefixes(self, group_name, location, public_ip_prefix_name):
        # Create public IP prefix defaults[put]
        BODY = {"location": location, "prefix_length": "30", "sku": {"name": "Standard"}}
        result = self.mgmt_client.public_ip_prefixes.begin_create_or_update(group_name, public_ip_prefix_name, BODY)
        return result.result()

    @RandomNameResourceGroupPreparer(location=AZURE_LOCATION)
    @recorded_by_proxy
    def test_network(self, resource_group):

        SUBSCRIPTION_ID = self.get_settings_value("SUBSCRIPTION_ID")
        RESOURCE_GROUP = resource_group.name
        NAT_GATEWAY_NAME = "myNatGateway"
        PUBLIC_IP_ADDRESS_NAME = "publicipaddress"
        PUBLIC_IP_PREFIX_NAME = "publicipprefix"

        self.create_public_ip_addresses(RESOURCE_GROUP, AZURE_LOCATION, PUBLIC_IP_ADDRESS_NAME)
        self.create_public_ip_prefixes(RESOURCE_GROUP, AZURE_LOCATION, PUBLIC_IP_PREFIX_NAME)

        # /NatGateways/put/Create nat gateway[put]
        BODY = {
            "location": "eastus",
            "sku": {"name": "Standard"},
            "public_ip_addresses": [
                {
                    "id": "/subscriptions/"
                    + SUBSCRIPTION_ID
                    + "/resourceGroups/"
                    + RESOURCE_GROUP
                    + "/providers/Microsoft.Network/publicIPAddresses/"
                    + PUBLIC_IP_ADDRESS_NAME
                }
            ],
            "public_ip_prefixes": [
                {
                    "id": "/subscriptions/"
                    + SUBSCRIPTION_ID
                    + "/resourceGroups/"
                    + RESOURCE_GROUP
                    + "/providers/Microsoft.Network/publicIPPrefixes/"
                    + PUBLIC_IP_PREFIX_NAME
                }
            ],
        }
        result = self.mgmt_client.nat_gateways.begin_create_or_update(
            resource_group_name=RESOURCE_GROUP, nat_gateway_name=NAT_GATEWAY_NAME, parameters=BODY
        )
        result = result.result()

        # /NatGateways/get/Get nat gateway[get]
        result = self.mgmt_client.nat_gateways.get(
            resource_group_name=RESOURCE_GROUP, nat_gateway_name=NAT_GATEWAY_NAME
        )

        # /NatGateways/get/List nat gateways in resource group[get]
        result = self.mgmt_client.nat_gateways.list(resource_group_name=RESOURCE_GROUP)

        # /NatGateways/get/List all nat gateways[get]
        result = self.mgmt_client.nat_gateways.list_all()

        # /NatGateways/patch/Update nat gateway tags[patch]
        BODY = {"tags": {"tag1": "value1", "tag2": "value2"}}
        result = self.mgmt_client.nat_gateways.update_tags(
            resource_group_name=RESOURCE_GROUP, nat_gateway_name=NAT_GATEWAY_NAME, parameters=BODY
        )

        # /NatGateways/delete/Delete nat gateway[delete]
        result = self.mgmt_client.nat_gateways.begin_delete(
            resource_group_name=RESOURCE_GROUP, nat_gateway_name=NAT_GATEWAY_NAME
        )
        result = result.result()


# ------------------------------------------------------------------------------
if __name__ == "__main__":
    unittest.main()
