// 
// Copyright (c) Microsoft and contributors.  All rights reserved.
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// 
// See the License for the specific language governing permissions and
// limitations under the License.
// 

// Warning: This code was generated by a tool.
// 
// Changes to this file may cause incorrect behavior and will be lost if the
// code is regenerated.

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

namespace Microsoft.Azure.Management.Sql.Models
{
    /// <summary>
    /// Represents the properties of an Azure SQL Database recommended index.
    /// </summary>
    public partial class RecommendedIndexProperties
    {
        private string _action;
        
        /// <summary>
        /// Optional. Gets the proposed index action. We suggest user to create
        /// missing index, drop unused index or to rebuild already existing
        /// index to improve its performance. Possible values are 'Create',
        /// 'Drop', 'Rebuild'.
        /// </summary>
        public string Action
        {
            get { return this._action; }
            set { this._action = value; }
        }
        
        private IList<string> _columns;
        
        /// <summary>
        /// Optional. Columns over which to build index
        /// </summary>
        public IList<string> Columns
        {
            get { return this._columns; }
            set { this._columns = value; }
        }
        
        private DateTime _created;
        
        /// <summary>
        /// Optional. Gets the UTC datetime showing when this resource was
        /// created.
        /// </summary>
        public DateTime Created
        {
            get { return this._created; }
            set { this._created = value; }
        }
        
        private IList<OperationImpact> _estimatedImpact;
        
        /// <summary>
        /// Optional. Gets the estimated impact of doing recommended index
        /// action.
        /// </summary>
        public IList<OperationImpact> EstimatedImpact
        {
            get { return this._estimatedImpact; }
            set { this._estimatedImpact = value; }
        }
        
        private IList<string> _includedColumns;
        
        /// <summary>
        /// Optional. Gets the list of column names to be included in the index
        /// </summary>
        public IList<string> IncludedColumns
        {
            get { return this._includedColumns; }
            set { this._includedColumns = value; }
        }
        
        private string _indexScript;
        
        /// <summary>
        /// Optional. Gets the full build index script
        /// </summary>
        public string IndexScript
        {
            get { return this._indexScript; }
            set { this._indexScript = value; }
        }
        
        private string _indexType;
        
        /// <summary>
        /// Optional. Gets the type of index (CLUSTERED, NONCLUSTERED,
        /// COLUMNSTORE, CLUSTERED COLUMNSTORE)
        /// </summary>
        public string IndexType
        {
            get { return this._indexType; }
            set { this._indexType = value; }
        }
        
        private DateTime _lastModified;
        
        /// <summary>
        /// Optional. Gets the UTC datetime of when was this resource last
        /// changed.
        /// </summary>
        public DateTime LastModified
        {
            get { return this._lastModified; }
            set { this._lastModified = value; }
        }
        
        private IList<OperationImpact> _reportedImpact;
        
        /// <summary>
        /// Optional. Gets the values reported after index action is complete.
        /// </summary>
        public IList<OperationImpact> ReportedImpact
        {
            get { return this._reportedImpact; }
            set { this._reportedImpact = value; }
        }
        
        private string _schema;
        
        /// <summary>
        /// Optional. Gets the schema where table to build index over resides
        /// </summary>
        public string Schema
        {
            get { return this._schema; }
            set { this._schema = value; }
        }
        
        private string _state;
        
        /// <summary>
        /// Optional. Gets the state recommendation is in. Current options are:
        /// 'Active', 'Pending', 'Executing', 'Verifying', 'Pending Revert',
        /// 'Reverting', 'Reverted', 'Ignored', 'Expired', 'Blocked',
        /// 'Success'.
        /// </summary>
        public string State
        {
            get { return this._state; }
            set { this._state = value; }
        }
        
        private string _table;
        
        /// <summary>
        /// Optional. Gets the table on which to build index.
        /// </summary>
        public string Table
        {
            get { return this._table; }
            set { this._table = value; }
        }
        
        /// <summary>
        /// Initializes a new instance of the RecommendedIndexProperties class.
        /// </summary>
        public RecommendedIndexProperties()
        {
            this.Columns = new LazyList<string>();
            this.EstimatedImpact = new LazyList<OperationImpact>();
            this.IncludedColumns = new LazyList<string>();
            this.ReportedImpact = new LazyList<OperationImpact>();
        }
    }
}
