package com.backendsys.entity.Ai.Aiivh;

import com.backendsys.entity.validator.RangeArray;
import com.backendsys.entity.validator.RangeStringArray;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

@Data
public class AiPersonDTO {

    public static interface Detail{}
    public static interface Create{}
    public static interface Update{}
    public static interface Delete{}

    private Long id;

    @NotNull(message = "请求ID不能为空", groups = { Create.class, Update.class })
    private String request_id;
    @NotNull(message = "任务ID不能为空", groups = { Create.class, Update.class, Delete.class, Detail.class })
    private String task_id;
    private String quota_code;

    private Long user_id;

    @NotEmpty(message="主播名称不能为空", groups = { Create.class, Update.class })
    @Size(min = 2, max = 30, message = "主播名称长度在 {min}-{max} 字符", groups = { Create.class, Update.class })
    private String anchor_name;
    // anchor_name: 王五_20240323174545
    // anchor_name_view: 王五
    private String anchor_name_view;

    @NotEmpty(message="定制类别不能为空", groups = { Create.class, Update.class })
    @RangeStringArray(message="定制类别取值有误，范围应是(IMAGE：2D小样本-标准版(专属口型)形象定制, IMAGE_GENERAL：2D小样本-标准版(通用口型)形象定制, IMAGE_4K：2D小样本-高精版(专属口型)形象定制, VOICE：2D小样本声音定制, IMAGE_PHOTO：2D小样本(照片数智人)形象定制)", value = {"IMAGE", "IMAGE_GENERAL", "IMAGE_4K", "VOICE", "IMAGE_PHOTO"}, groups = { Create.class, Update.class })
    private String make_type;

    @Size(max = 500, message = "视频格式授权书URL长度不超过 {max} 字符", groups = { Create.class, Update.class })
    private String identity_cos_url;

    @Size(max = 500, message = "PDF格式授权书URL长度不超过 {max} 字符", groups = { Create.class, Update.class })
    private String identity_written_cos_url;

    @NotEmpty(message="形象定制素材URL不能为空", groups = { Create.class, Update.class })
    @Size(max = 500, message = "形象定制素材URL长度不超过 {max} 字符", groups = { Create.class, Update.class })
    private String material_cos_url;

    // 形象定制类型，训练出来的形象是否带原始背景。默认“否”，即不带原始背景，在应用过程中可以按需更换背景
    @RangeArray(message="是否去除形象背景取值有误，范围应是(-1否, 1是)", value = {"-1", "1"})
    private Integer is_remove_background;

    @NotEmpty(message="性别不能为空", groups = { Create.class, Update.class })
    @RangeStringArray(message="性别取值有误，范围应是(MALE：男, FEMALE：女)", value = {"MALE", "FEMALE"})
    private String sex_type;

    @Size(max = 100, message = "定制备注信息长度不超过 {max} 字符")
    private String notes;

    @Size(min = 4, max = 1000, message = "生成驱动demo的文本内容长度在 {min}-{max} 字符")
    private String text_driver;

    @Size(max = 500, message = "生成驱动demo的音频文件路径长度不超过 {max} 字符")
    private String voice_driver_cos_file;



    @NotEmpty(message="任务状态不能为空", groups = { Update.class })
    @RangeStringArray(message="任务状态取值有误，范围应是 (MAKING：进行中, SUCCESS：制作成功, FAIL：制作失败)", value = {"MAKING", "SUCCESS", "FAIL"}, groups = { Update.class })
    private String task_status;
    @Size(max = 1000, message = "任务制作状态信息长度不超过 {max} 字符", groups = { Update.class })
    private String task_status_info;

    @NotEmpty(message="任务阶段状态不能为空", groups = { Update.class })
    @RangeStringArray(message="任务阶段状态取值有误，范围应是 (SUBMIT：素材提交, AUDIT：人工审核, PROCESS：预处理 (仅形象定制有), TRAIN：智能训练, CONFIRM：效果确认 (照片定制无此阶段), END：完成)", value = {"SUBMIT", "AUDIT", "PROCESS", "TRAIN", "CONFIRM", "END"}, groups = { Update.class })
    private String stage_status;
    @Size(max = 1000, message = "任务阶段状态长度不超过 {max} 字符", groups = { Update.class })
    private String stage_status_info;

    @NotEmpty(message="确认效果状态不能为空", groups = { Update.class })
    @RangeStringArray(message="确认效果状态取值有误，范围应是 (AGREE：认同, REJECT：驳回)", value = {"AGREE", "REJECT"}, groups = { Update.class })
    private String confirm_status;
    @Size(max = 1000, message = "确认效果状态长度不超过 {max} 字符", groups = { Update.class })
    private String confirm_status_info;

    @Size(max = 10000, message = "生成效果视频地址长度不超过 {max} 字符", groups = { Update.class })
    private String result;

    private String tencent_order_code;
    private String launch_note;

}
