// <auto-generated>
// 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.
// </auto-generated>

namespace Microsoft.Azure.Management.WebSites.Models
{
    using Microsoft.Rest;
    using Microsoft.Rest.Serialization;
    using Newtonsoft.Json;
    using System.Linq;

    /// <summary>
    /// Process Thread Information.
    /// </summary>
    [Rest.Serialization.JsonTransformation]
    public partial class ProcessThreadInfo : ProxyOnlyResource
    {
        /// <summary>
        /// Initializes a new instance of the ProcessThreadInfo class.
        /// </summary>
        public ProcessThreadInfo()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the ProcessThreadInfo class.
        /// </summary>
        /// <param name="id">Resource Id.</param>
        /// <param name="name">Resource Name.</param>
        /// <param name="kind">Kind of resource.</param>
        /// <param name="type">Resource type.</param>
        /// <param name="processThreadInfoId">ARM Identifier for
        /// deployment.</param>
        /// <param name="href">HRef URI.</param>
        /// <param name="process">Process URI.</param>
        /// <param name="startAddress">Start address.</param>
        /// <param name="currentPriority">Current thread priority.</param>
        /// <param name="priorityLevel">Thread priority level.</param>
        /// <param name="basePriority">Base priority.</param>
        /// <param name="startTime">Start time.</param>
        /// <param name="totalProcessorTime">Total processor time.</param>
        /// <param name="userProcessorTime">User processor time.</param>
        /// <param name="priviledgedProcessorTime">Priviledged processor
        /// time.</param>
        /// <param name="state">Thread state.</param>
        /// <param name="waitReason">Wait reason.</param>
        public ProcessThreadInfo(string id = default(string), string name = default(string), string kind = default(string), string type = default(string), int? processThreadInfoId = default(int?), string href = default(string), string process = default(string), string startAddress = default(string), int? currentPriority = default(int?), string priorityLevel = default(string), int? basePriority = default(int?), System.DateTime? startTime = default(System.DateTime?), string totalProcessorTime = default(string), string userProcessorTime = default(string), string priviledgedProcessorTime = default(string), string state = default(string), string waitReason = default(string))
            : base(id, name, kind, type)
        {
            ProcessThreadInfoId = processThreadInfoId;
            Href = href;
            Process = process;
            StartAddress = startAddress;
            CurrentPriority = currentPriority;
            PriorityLevel = priorityLevel;
            BasePriority = basePriority;
            StartTime = startTime;
            TotalProcessorTime = totalProcessorTime;
            UserProcessorTime = userProcessorTime;
            PriviledgedProcessorTime = priviledgedProcessorTime;
            State = state;
            WaitReason = waitReason;
            CustomInit();
        }

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

        /// <summary>
        /// Gets or sets ARM Identifier for deployment.
        /// </summary>
        [JsonProperty(PropertyName = "properties.id")]
        public int? ProcessThreadInfoId { get; set; }

        /// <summary>
        /// Gets or sets hRef URI.
        /// </summary>
        [JsonProperty(PropertyName = "properties.href")]
        public string Href { get; set; }

        /// <summary>
        /// Gets or sets process URI.
        /// </summary>
        [JsonProperty(PropertyName = "properties.process")]
        public string Process { get; set; }

        /// <summary>
        /// Gets or sets start address.
        /// </summary>
        [JsonProperty(PropertyName = "properties.startAddress")]
        public string StartAddress { get; set; }

        /// <summary>
        /// Gets or sets current thread priority.
        /// </summary>
        [JsonProperty(PropertyName = "properties.currentPriority")]
        public int? CurrentPriority { get; set; }

        /// <summary>
        /// Gets or sets thread priority level.
        /// </summary>
        [JsonProperty(PropertyName = "properties.priorityLevel")]
        public string PriorityLevel { get; set; }

        /// <summary>
        /// Gets or sets base priority.
        /// </summary>
        [JsonProperty(PropertyName = "properties.basePriority")]
        public int? BasePriority { get; set; }

        /// <summary>
        /// Gets or sets start time.
        /// </summary>
        [JsonProperty(PropertyName = "properties.startTime")]
        public System.DateTime? StartTime { get; set; }

        /// <summary>
        /// Gets or sets total processor time.
        /// </summary>
        [JsonProperty(PropertyName = "properties.totalProcessorTime")]
        public string TotalProcessorTime { get; set; }

        /// <summary>
        /// Gets or sets user processor time.
        /// </summary>
        [JsonProperty(PropertyName = "properties.userProcessorTime")]
        public string UserProcessorTime { get; set; }

        /// <summary>
        /// Gets or sets priviledged processor time.
        /// </summary>
        [JsonProperty(PropertyName = "properties.priviledgedProcessorTime")]
        public string PriviledgedProcessorTime { get; set; }

        /// <summary>
        /// Gets or sets thread state.
        /// </summary>
        [JsonProperty(PropertyName = "properties.state")]
        public string State { get; set; }

        /// <summary>
        /// Gets or sets wait reason.
        /// </summary>
        [JsonProperty(PropertyName = "properties.waitReason")]
        public string WaitReason { get; set; }

    }
}
