using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;

namespace XPrintServer.Api.Entities.Vol
{
    /// <summary>
    /// 图片分割 业务请求参数，放到request.body中，MIME-Type为application/json
    /// </summary>
    public class ImageSplitInfo
    {
        public ImageSplitInfo() { }


        /// <summary>
        /// 算法名称
        /// </summary>
        /// <remarks>
        /// 取固定值为high_aes_general_v30l_zt2i
        /// </remarks>

        [JsonPropertyName("req_key")]
        [Required]
        public string ReqKey { get; set; } = "entity_seg";


        ///// <summary>
        ///// 输入图片base64数组，仅支持一张图 优先生效
        /////（输入图长 x 宽总像素应小于1000万，当超过该限制时，会对图片进行resize降分辨率处理）（与 image_urls 二选一）
        ///// </summary>
        //[JsonPropertyName("binary_data_base64")]
        //[Required]
        //public string[] BinaryDataBase64 { get; set; } = Array.Empty<string>();

        /// <summary>
        /// 图片文件URL数组，仅支持一张图
        ///（输入图长 x 宽总像素应小于1000万，当超过该限制时，会对图片进行resize降分辨率处理）（与 binary_data_base64 二选一）
        /// </summary>
        [JsonPropertyName("image_urls")]
        [Required]
        public string[] ImageUrls { get; set; } = Array.Empty<string>();


        /// <summary>
        /// 模型输出最大的实体数量，取值范围(1～100)
        /// 默认值：20
        /// </summary>
        [JsonPropertyName("max_entity")]
        public int MaxEntity { get; set; } = 20;

        /// <summary>
        ///0: 图层的index_map（索引图）
        ///1: 所有实体图层(最多max_entity个)
        ///2: 原图1张 + 图层index_map
        ///3: 原图1张 + 所有实体图层(最多max_entity个)
        ///4: 最大实体图层前景图 + 最大实体图层
        ///默认值：0
        ///图层索引图index_map: 取值范围0～max_entity, 每个值代表一个图层的id
        ///实体图层：取值范围0～255，代表属于当前图层的置信度
        /// </summary>
        [JsonPropertyName("return_format")]
        public int ReturnFormat { get; set; } = 0;

        /// <summary>
        /// 0：不对边缘增强
        /// 1：对边缘增强
        /// 默认值：0
        /// 仅对分开图层图生效, index_map会丢失matting细节
        /// </summary>
        [JsonPropertyName("refine_mask")]
        public int RefineMask { get; set; } = 0;

        /// <summary>
        /// 水印信息
        /// </summary>
        [JsonPropertyName("logo_info")]
        public LogoInfo LogoInfo { get; set; } = new LogoInfo();
    }
}
