using CloudGaming.DtoModel.JY;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace CloudGaming.DtoModel.PlayGame
{
    /// <summary>
    /// 启动游戏配置
    /// </summary>
    public class PlayGameSettings : JYRequestParameter
    {
        public PlayGameSettings()
        {
            this.AbleQueue = 1;
        }

        public PlayGameSettings(string sn, int userId) : base(sn, userId)
        {
            this.AbleQueue = 1;
        }


        /// <summary>
        /// 自定义游戏 id/游戏标识
        /// </summary>
        [JsonPropertyName("game_key")]
        public string GameKey { get; set; }

        /// <summary>
        /// 显示等级，可在后台配置，默认为 1
        /// </summary>
        [JsonPropertyName("display_grade")]
        public int DisplayGrade { get; set; }

        /// <summary>
        /// 队列等级，等级越高优先级越高， 默认 1
        /// </summary>
        [JsonPropertyName("queue_grade")]
        public int QueueGrade { get; set; }

        /// <summary>
        /// 服务器等级，只使用相同等级的资源，默认 0，不限定资源
        /// </summary>
        [JsonPropertyName("gs_grade")]
        public int? GsGrade { get; set; }

        /// <summary>
        /// 是否排队 1、是 0、否 默认 0
        /// </summary>
        [JsonPropertyName("able_queue")]
        public int? AbleQueue { get; set; }

        /// <summary>
        /// 指定 GS 游戏服务器名称
        /// </summary>
        [JsonPropertyName("gs_name")]
        public string GsName { get; set; }

        /// <summary>
        /// 加载的存档名称，可以由 sc 接口获取
        /// </summary>
        [JsonPropertyName("save_time")]
        public string SaveTime { get; set; }

        /// <summary>
        /// 加载的存档来源，可以加载特定用户标识的存档，默认为加载自己的存档
        /// </summary>
        [JsonPropertyName("save_from")]
        public string SaveFrom { get; set; }

        /// <summary>
        /// 是否保存存档，1、是 0、否，默认为 1
        /// </summary>
        [JsonPropertyName("save_enable")]
        public int? SaveEnable { get; set; }

        /// <summary>
        /// 房间名称
        /// </summary>
        [JsonPropertyName("room_name")]
        public string RoomName { get; set; }

        /// <summary>
        /// 启动分辨率，'720P'或者'1080P'，默认空
        /// </summary>
        [JsonPropertyName("start_resolution")]
        public string StartResolution { get; set; }

        /// <summary>
        /// 记录最小游戏存档时长，单位为秒
        /// </summary>
        [JsonPropertyName("record_game_time")]
        public int? RecordGameTime { get; set; }

        /// <summary>
        /// 设备型号
        /// </summary>
        [JsonPropertyName("model_name")]
        public string ModelName { get; set; }

        /// <summary>
        /// 游戏启动参数
        /// </summary>
        [JsonPropertyName("game_args")]
        public string GameArgs { get; set; }

        /// <summary>
        /// 应用服务器节点 id，多个使用逗号隔开
        /// </summary>
        [JsonPropertyName("apply_team_ids")]
        public string ApplyTeamIds { get; set; }

        /// <summary>
        /// 芯片
        /// </summary>
        [JsonPropertyName("cpu")]
        public string Cpu { get; set; }

        /// <summary>
        /// 挂机时长（秒）
        /// </summary>
        [JsonPropertyName("hang_up_timer")]
        public int? HangUpTimer { get; set; }

        /// <summary>
        /// 桌面版 GS 加载的背景地址
        /// </summary>
        [JsonPropertyName("desk_url")]
        public string DeskUrl { get; set; }

        /// <summary>
        /// 手柄位置，默认 0；0-4：0 为累加，大于等于 4 则禁止所有操控
        /// </summary>
        [JsonPropertyName("handle_pos")]
        public int? HandlePos { get; set; }

        /// <summary>
        /// 设置归属玩家的控制设备，优先级高于 HandlePos，JSON 字符串格式
        /// </summary>
        [JsonPropertyName("handle_device")]
        public string HandleDevice { get; set; }

        /// <summary>
        /// 设置字符串房间随机密码，只有使用相同密码的操控设备权限变更才能判定有效
        /// </summary>
        [JsonPropertyName("room_key")]
        public string RoomKey { get; set; }

        /// <summary>
        /// 输入模式，可选默认为 3，1-手柄，2-键鼠，3-手柄键盘
        /// </summary>
        [JsonPropertyName("input_mode")]
        public int? InputMode { get; set; }

        /// <summary>
        /// 是否支持重新启动游戏，1 为支持，0 为不支持，默认为 0
        /// </summary>
        [JsonPropertyName("enable_restart")]
        public int? EnableRestart { get; set; }

        /// <summary>
        /// 自定义 TURN 配置，JSON 字符串格式
        /// </summary>
        [JsonPropertyName("turn")]
        public string Turn { get; set; }

        /// <summary>
        /// 是否支持自动存档功能，1 为支持，0 为不支持，默认为 0
        /// </summary>
        [JsonPropertyName("save_auto")]
        public int? SaveAuto { get; set; }

        /// <summary>
        /// 自动存档间隔时长（单位秒），可选，默认 5 分钟
        /// </summary>
        [JsonPropertyName("save_auto_timer")]
        public int? SaveAutoTimer { get; set; }

        /// <summary>
        /// 是否保存访客的存档，0 为否，1 为是，默认 0
        /// </summary>
        [JsonPropertyName("guest_save")]
        public int? GuestSave { get; set; }
    }
}
