using System;
using System.Collections.Generic;
using System.Linq;
using Hyak.Common;
using Microsoft.Azure.Management.SiteRecovery.Models;

namespace Microsoft.Azure.Management.SiteRecovery.Models
{
    /// <summary>
    /// The definition of a Protection entity properties object.
    /// </summary>
    public partial class ProtectionEntityProperties
    {
        private string _activeLocation;
        
        /// <summary>
        /// Required. Active location of protection entity.
        /// </summary>
        public string ActiveLocation
        {
            get { return this._activeLocation; }
            set { this._activeLocation = value; }
        }
        
        private IList<string> _allowedOperations;
        
        /// <summary>
        /// Required. Gets or sets the allowed operations on the protection
        /// entity.
        /// </summary>
        public IList<string> AllowedOperations
        {
            get { return this._allowedOperations; }
            set { this._allowedOperations = value; }
        }
        
        private string _fabricObjectId;
        
        /// <summary>
        /// Required. Fabric ID of the object
        /// </summary>
        public string FabricObjectId
        {
            get { return this._fabricObjectId; }
            set { this._fabricObjectId = value; }
        }
        
        private string _friendlyName;
        
        /// <summary>
        /// Required. Friendly name
        /// </summary>
        public string FriendlyName
        {
            get { return this._friendlyName; }
            set { this._friendlyName = value; }
        }
        
        private string _protectionContainerId;
        
        /// <summary>
        /// Required. Protection container ID of the object
        /// </summary>
        public string ProtectionContainerId
        {
            get { return this._protectionContainerId; }
            set { this._protectionContainerId = value; }
        }
        
        private ProtectionProfile _protectionProfile;
        
        /// <summary>
        /// Optional. Protection Profile
        /// </summary>
        public ProtectionProfile ProtectionProfile
        {
            get { return this._protectionProfile; }
            set { this._protectionProfile = value; }
        }
        
        private string _protectionStateDescription;
        
        /// <summary>
        /// Required. Protection state description of the protected entity
        /// </summary>
        public string ProtectionStateDescription
        {
            get { return this._protectionStateDescription; }
            set { this._protectionStateDescription = value; }
        }
        
        private string _protectionStatus;
        
        /// <summary>
        /// Required. Gets or sets the protection entity status.
        /// </summary>
        public string ProtectionStatus
        {
            get { return this._protectionStatus; }
            set { this._protectionStatus = value; }
        }
        
        private string _replicationHealth;
        
        /// <summary>
        /// Required. Gets or sets the consolidated protection health for the
        /// VM taking any issues with SRS as well as all the replication units
        /// associated with the VM's replication group into account. This is a
        /// string representation of the ProtectionHealth enumeration
        /// </summary>
        public string ReplicationHealth
        {
            get { return this._replicationHealth; }
            set { this._replicationHealth = value; }
        }
        
        private string _replicationProvider;
        
        /// <summary>
        /// Required. Name of the Replication Provider used to protect the
        /// virtual machine. Null if not protected
        /// </summary>
        public string ReplicationProvider
        {
            get { return this._replicationProvider; }
            set { this._replicationProvider = value; }
        }
        
        private ProtectionEntityProviderSettings _replicationProviderSettings;
        
        /// <summary>
        /// Required. The replication provider settings.
        /// </summary>
        public ProtectionEntityProviderSettings ReplicationProviderSettings
        {
            get { return this._replicationProviderSettings; }
            set { this._replicationProviderSettings = value; }
        }
        
        private string _serverId;
        
        /// <summary>
        /// Required. Server ID of the object
        /// </summary>
        public string ServerId
        {
            get { return this._serverId; }
            set { this._serverId = value; }
        }
        
        private string _testFailoverStateDescription;
        
        /// <summary>
        /// Required. Test failover state description.
        /// </summary>
        public string TestFailoverStateDescription
        {
            get { return this._testFailoverStateDescription; }
            set { this._testFailoverStateDescription = value; }
        }
        
        /// <summary>
        /// Initializes a new instance of the ProtectionEntityProperties class.
        /// </summary>
        public ProtectionEntityProperties()
        {
            this.AllowedOperations = new LazyList<string>();
        }
    }
}
