// 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.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.

namespace Microsoft.Azure.Management.RecoveryServices.SiteRecovery.Models
{
    using Microsoft.Azure;
    using Microsoft.Azure.Management;
    using Microsoft.Azure.Management.RecoveryServices;
    using Microsoft.Azure.Management.RecoveryServices.SiteRecovery;
    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// Hyper-V Replica Azure specific input for creating a protection profile.
    /// </summary>
    [Newtonsoft.Json.JsonObject("HyperVReplicaAzure")]
    public partial class HyperVReplicaAzurePolicyInput : PolicyProviderSpecificInput
    {
        /// <summary>
        /// Initializes a new instance of the HyperVReplicaAzurePolicyInput
        /// class.
        /// </summary>
        public HyperVReplicaAzurePolicyInput()
        {
          CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the HyperVReplicaAzurePolicyInput
        /// class.
        /// </summary>
        /// <param name="recoveryPointHistoryDuration">The duration (in hours)
        /// to which point the recovery history needs to be
        /// maintained.</param>
        /// <param name="applicationConsistentSnapshotFrequencyInHours">The
        /// interval (in hours) at which Hyper-V Replica should create an
        /// application consistent snapshot within the VM.</param>
        /// <param name="replicationInterval">The replication interval.</param>
        /// <param name="onlineReplicationStartTime">The scheduled start time
        /// for the initial replication. If this parameter
        /// is Null, the initial replication starts immediately.</param>
        /// <param name="encryption">A value indicating whether encryption
        /// needs to be enabled for Vms in this cloud.</param>
        /// <param name="storageAccounts">The list of storage accounts to which
        /// the VMs in the primary cloud can
        /// replicate to.</param>
        public HyperVReplicaAzurePolicyInput(int? recoveryPointHistoryDuration = default(int?), int? applicationConsistentSnapshotFrequencyInHours = default(int?), int? replicationInterval = default(int?), string onlineReplicationStartTime = default(string), string encryption = default(string), IList<string> storageAccounts = default(IList<string>))
        {
            RecoveryPointHistoryDuration = recoveryPointHistoryDuration;
            ApplicationConsistentSnapshotFrequencyInHours = applicationConsistentSnapshotFrequencyInHours;
            ReplicationInterval = replicationInterval;
            OnlineReplicationStartTime = onlineReplicationStartTime;
            Encryption = encryption;
            StorageAccounts = storageAccounts;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets the duration (in hours) to which point the recovery
        /// history needs to be
        /// maintained.
        /// </summary>
        [JsonProperty(PropertyName = "recoveryPointHistoryDuration")]
        public int? RecoveryPointHistoryDuration { get; set; }

        /// <summary>
        /// Gets or sets the interval (in hours) at which Hyper-V Replica
        /// should create an
        /// application consistent snapshot within the VM.
        /// </summary>
        [JsonProperty(PropertyName = "applicationConsistentSnapshotFrequencyInHours")]
        public int? ApplicationConsistentSnapshotFrequencyInHours { get; set; }

        /// <summary>
        /// Gets or sets the replication interval.
        /// </summary>
        [JsonProperty(PropertyName = "replicationInterval")]
        public int? ReplicationInterval { get; set; }

        /// <summary>
        /// Gets or sets the scheduled start time for the initial replication.
        /// If this parameter
        /// is Null, the initial replication starts immediately.
        /// </summary>
        [JsonProperty(PropertyName = "onlineReplicationStartTime")]
        public string OnlineReplicationStartTime { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether encryption needs to be
        /// enabled for Vms in this cloud.
        /// </summary>
        [JsonProperty(PropertyName = "encryption")]
        public string Encryption { get; set; }

        /// <summary>
        /// Gets or sets the list of storage accounts to which the VMs in the
        /// primary cloud can
        /// replicate to.
        /// </summary>
        [JsonProperty(PropertyName = "storageAccounts")]
        public IList<string> StorageAccounts { get; set; }

    }
}
