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

namespace XPrintServer.Api.Entities.Vol
{
    public class VolImg2ImgRequestInfo
    {
        /// <summary>
        /// 算法名称
        /// </summary>
        /// <remarks>
        /// 取固定值为high_aes_general_v30l_zt2i
        /// </remarks>

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


        /// <summary>
        /// 图片URL
        /// 示例："https://图片1.png"
        /// </summary>
        [JsonPropertyName("image_input")]
        [Required]
        public string ImageInput { get; set; } = string.Empty;

        /// <summary>
        /// 用于生成图像的提示词，中英文均可输入
        /// </summary>
        [JsonPropertyName("prompt")]
        [Required]
        public string Prompt { get; set; } = string.Empty;


        /// <summary>
        /// 高清处理效果，越高人脸清晰度越高，建议使用默认值
        /// 默认值：0.4
        /// 取值范围：[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
        /// </summary>
        [JsonPropertyName("gpen")]
        [Required]
        [Range(0f, 1f)]
        public float Gpen { get; set; } = 0.4f;


        /// <summary>
        /// 人脸美化效果，越高美颜效果越明显，建议使用默认值
        /// 默认值：0.3
        /// 取值范围：[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
        /// </summary>
        [JsonPropertyName("skin")]
        [Required]
        [Range(0f, 1f)]
        public float Skin { get; set; } = 0.3f;


        /// <summary>
        /// 匀肤效果 ，越高均匀肤色去除瑕疵效果越明显，建议使用默认值
        /// 默认值：0
        /// 取值范围：[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
        /// </summary>
        [JsonPropertyName("skin_unifi")]
        [Required]
        [Range(0f, 1f)]
        public float SkinUnifi { get; set; } = 0f;

        /// <summary>
        /// 参考模式，取值说明：
        /// "creative"：提示词模式（有prompt时自动切换此模式）（只参考人物的性别特征）
        /// "reference"：全参考模式（无prompt时自动切换此模式）参考人物更多维度特征（性别、服饰、发型等）及背景
        /// "reference_char"：人物参考模式，参考人物更多维度特征（性别、服饰、发型等），不参考背景
        /// 手动输入优先级大于自动
        /// </summary>
        [JsonPropertyName("gen_mode")]
        [Required]
        public string GenMode { get; set; } = string.Empty;


        /// <summary>
        /// 随机种子
        /// </summary>
        /// <remarks>
        /// 作为确定扩散初始状态的基础，默认-1（随机）。
        /// 若随机种子为相同正整数且其他参数均一致，则生成图片极大概率效果一致
        /// 默认值：-1
        /// </remarks>
        [JsonPropertyName("seed")]
        public int Seed { get; set; } = -1;

        /// <summary>
        /// 生成图像的宽
        /// </summary>
        /// <remarks>
        /// 默认值：1328
        /// 取值范围：[512, 2048]
        /// </remarks>
        [JsonPropertyName("width")]
        [Range(512, 2048)]
        public int Width { get; set; } = 1328;

        /// <summary>
        /// 生成图像的高
        /// </summary>
        /// <remarks>
        /// 默认值：1328
        /// 取值范围：[512, 2048]
        /// </remarks>
        [JsonPropertyName("height")]
        [Range(512, 2048)]
        public int Height { get; set; } = 1328;

        /// <summary>
        /// 输出是否返回图片链接
        /// </summary>
        /// <remarks>
        /// 链接有效期为24小时
        /// </remarks>
        [JsonPropertyName("return_url")]
        public bool ReturnUrl { get; set; }

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