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

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


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

        [JsonPropertyName("req_key")]
        [Required]
        public string ReqKey { get; set; } = "saliency_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>
        /// 0: 返回裁剪出主体区域的BGRA透明图片
        /// 1: 返回原图大小Mask分割图
        /// 2: 返回裁剪出主体区域的BGR前景图 叠加 方形纯色背景
        /// 3: 返回原图大小的BGRA透明前景图
        /// 4: 返回原图大小的BGRA透明前景图+原图大小mask两个产物
        /// 默认值：0
        /// 注：如使用0, 3, 4等需要返回透明底图的方式，需配合使用rgb=[-1, -1, -1]
        /// </summary>
        [JsonPropertyName("only_mask")]
        public int OnlyMask { get; set; } = 0;


        /// <summary>
        /// 取值范围0～255，且仅当only_mask=2、3或4时才生效，返回抠出mask区域的rgb颜色的背景叠前景（当rgb为[-1,-1,-1]时，返回BGRA的透明图）
        /// 默认值：[255, 255, 255]0
        /// 注：业务使用请设置[-1, -1, -1] 获得rgba透明底结果；如需指定背景色设置非[-1, -1, -1] 值（如[255, 255, 255] 设置白背景）后处理时或性能不佳。
        /// </summary>
        [JsonPropertyName("rgb")]
        public int[] RGB { get; set; } = [-1, -1, -1];

        /// <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();
    }
}
