
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
//
// Changes to this file may cause incorrect behavior and will be lost when
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
#nullable enable
namespace HathoraCloud.Models.Shared
{
    using HathoraCloud.Models.Shared;
    using Newtonsoft.Json;
    using System.Collections.Generic;
    using System;
    using UnityEngine;
    
    [Serializable]
    public class DeploymentV3
    {

        /// <summary>
        /// Additional ports your server listens on.
        /// </summary>
        [SerializeField]
        [JsonProperty("additionalContainerPorts")]
        public List<ContainerPort> AdditionalContainerPorts { get; set; } = default!;

        /// <summary>
        /// System generated unique identifier for an application.
        /// </summary>
        [SerializeField]
        [JsonProperty("appId")]
        public string AppId { get; set; } = default!;

        /// <summary>
        /// System generated id for a build. Can also be user defined when creating a build.
        /// </summary>
        [SerializeField]
        [JsonProperty("buildId")]
        public string BuildId { get; set; } = default!;

        /// <summary>
        /// Tag to associate an external version with a build. It is accessible via <a href="">`GetBuildInfo()`</a>.
        /// </summary>
        [SerializeField]
        [JsonProperty("buildTag")]
        public string? BuildTag { get; set; }

        /// <summary>
        /// When the deployment was created.
        /// </summary>
        [SerializeField]
        [JsonProperty("createdAt")]
        public DateTime CreatedAt { get; set; } = default!;

        [SerializeField]
        [JsonProperty("createdBy")]
        public string CreatedBy { get; set; } = default!;

        /// <summary>
        /// A container port object represents the transport configruations for how your server will listen.
        /// </summary>
        [SerializeField]
        [JsonProperty("defaultContainerPort")]
        public ContainerPort DefaultContainerPort { get; set; } = default!;

        /// <summary>
        /// System generated id for a deployment.
        /// </summary>
        [SerializeField]
        [JsonProperty("deploymentId")]
        public string DeploymentId { get; set; } = default!;

        /// <summary>
        /// Arbitrary metadata associated with a deployment.
        /// </summary>
        [SerializeField]
        [JsonProperty("deploymentTag")]
        public string? DeploymentTag { get; set; }

        /// <summary>
        /// The environment variable that our process will have access to at runtime.
        /// </summary>
        [SerializeField]
        [JsonProperty("env")]
        public List<DeploymentV3Env> Env { get; set; } = default!;

        /// <summary>
        /// EXPERIMENTAL - this feature is in closed beta.<br/>
        /// 
        /// <remarks>
        /// The number of GPUs allocated to your process. Must be an integer.<br/>
        /// If not provided, the requested GPU is 0.
        /// </remarks>
        /// </summary>
        [SerializeField]
        [JsonProperty("experimentalRequestedGPU")]
        public double? ExperimentalRequestedGPU { get; set; }

        /// <summary>
        /// Option to shut down processes that have had no new connections or rooms<br/>
        /// 
        /// <remarks>
        /// for five minutes.
        /// </remarks>
        /// </summary>
        [SerializeField]
        [JsonProperty("idleTimeoutEnabled")]
        public bool IdleTimeoutEnabled { get; set; } = default!;

        /// <summary>
        /// The number of cores allocated to your process.
        /// </summary>
        [SerializeField]
        [JsonProperty("requestedCPU")]
        public double RequestedCPU { get; set; } = default!;

        /// <summary>
        /// The amount of memory allocated to your process. By default, this is capped<br/>
        /// 
        /// <remarks>
        /// at 8192 MB, but can be increased further on the Enterprise tier.
        /// </remarks>
        /// </summary>
        [SerializeField]
        [JsonProperty("requestedMemoryMB")]
        public double RequestedMemoryMB { get; set; } = default!;

        /// <summary>
        /// Governs how many <a href="https://hathora.dev/docs/concepts/hathora-entities#room">rooms</a> can be scheduled in a process.
        /// </summary>
        [SerializeField]
        [JsonProperty("roomsPerProcess")]
        public int RoomsPerProcess { get; set; } = default!;
    }
}