// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for
// license information.
// 
// Code generated by Microsoft (R) AutoRest Code Generator 0.16.0.0
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.

namespace Microsoft.Azure.Management.DevTestLabs.Models
{
    using System;
    using System.Linq;
    using System.Collections.Generic;
    using Newtonsoft.Json;
    using Microsoft.Rest;
    using Microsoft.Rest.Serialization;
    using Microsoft.Rest.Azure;

    /// <summary>
    /// A virtual network.
    /// </summary>
    [JsonTransformation]
    public partial class VirtualNetwork : Resource
    {
        /// <summary>
        /// Initializes a new instance of the VirtualNetwork class.
        /// </summary>
        public VirtualNetwork() { }

        /// <summary>
        /// Initializes a new instance of the VirtualNetwork class.
        /// </summary>
        public VirtualNetwork(string id = default(string), string name = default(string), string type = default(string), string location = default(string), IDictionary<string, string> tags = default(IDictionary<string, string>), IList<Subnet> allowedSubnets = default(IList<Subnet>), string description = default(string), string externalProviderResourceId = default(string), IList<ExternalSubnet> externalSubnets = default(IList<ExternalSubnet>), IList<SubnetOverride> subnetOverrides = default(IList<SubnetOverride>), DateTime? createdDate = default(DateTime?), string provisioningState = default(string), string uniqueIdentifier = default(string))
            : base(id, name, type, location, tags)
        {
            AllowedSubnets = allowedSubnets;
            Description = description;
            ExternalProviderResourceId = externalProviderResourceId;
            ExternalSubnets = externalSubnets;
            SubnetOverrides = subnetOverrides;
            CreatedDate = createdDate;
            ProvisioningState = provisioningState;
            UniqueIdentifier = uniqueIdentifier;
        }

        /// <summary>
        /// The allowed subnets of the virtual network.
        /// </summary>
        [JsonProperty(PropertyName = "properties.allowedSubnets")]
        public IList<Subnet> AllowedSubnets { get; set; }

        /// <summary>
        /// The description of the virtual network.
        /// </summary>
        [JsonProperty(PropertyName = "properties.description")]
        public string Description { get; set; }

        /// <summary>
        /// The Microsoft.Network resource identifier of the virtual network.
        /// </summary>
        [JsonProperty(PropertyName = "properties.externalProviderResourceId")]
        public string ExternalProviderResourceId { get; set; }

        /// <summary>
        /// The external subnet properties.
        /// </summary>
        [JsonProperty(PropertyName = "properties.externalSubnets")]
        public IList<ExternalSubnet> ExternalSubnets { get; set; }

        /// <summary>
        /// The subnet overrides of the virtual network.
        /// </summary>
        [JsonProperty(PropertyName = "properties.subnetOverrides")]
        public IList<SubnetOverride> SubnetOverrides { get; set; }

        /// <summary>
        /// The creation date of the virtual network.
        /// </summary>
        [JsonProperty(PropertyName = "properties.createdDate")]
        public DateTime? CreatedDate { get; private set; }

        /// <summary>
        /// The provisioning status of the resource.
        /// </summary>
        [JsonProperty(PropertyName = "properties.provisioningState")]
        public string ProvisioningState { get; set; }

        /// <summary>
        /// The unique immutable identifier of a resource (Guid).
        /// </summary>
        [JsonProperty(PropertyName = "properties.uniqueIdentifier")]
        public string UniqueIdentifier { get; set; }

    }
}
