package com.yolo.keyboard.controller.admin.aicompanion.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import cn.idev.excel.annotation.*;

@Schema(description = "管理后台 - AI陪聊角色表，用于定义恋爱/陪伴型虚拟角色的基础信息与人设 Response VO")
@Data
@ExcelIgnoreUnannotated
public class KeyboardAiCompanionRespVO {

    @Schema(description = "陪聊角色唯一ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7816")
    @ExcelProperty("陪聊角色唯一ID")
    private Long id;

    @Schema(description = "角色名称（展示用，如：Katie Leona）", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
    @ExcelProperty("角色名称（展示用，如：Katie Leona）")
    private String name;

    @Schema(description = "角色头像URL，用于列表页和聊天页", example = "https://www.iocoder.cn")
    @ExcelProperty("角色头像URL，用于列表页和聊天页")
    private String avatarUrl;

    @Schema(description = "角色封面图URL，用于角色详情页", example = "https://www.iocoder.cn")
    @ExcelProperty("角色封面图URL，用于角色详情页")
    private String coverImageUrl;

    @Schema(description = "角色性别（male / female / other）")
    @ExcelProperty("角色性别（male / female / other）")
    private String gender;

    @Schema(description = "角色年龄段描述（如：20s、25-30）")
    @ExcelProperty("角色年龄段描述（如：20s、25-30）")
    private String ageRange;

    @Schema(description = "一句话人设描述，用于卡片或列表展示")
    @ExcelProperty("一句话人设描述，用于卡片或列表展示")
    private String shortDesc;

    @Schema(description = "角色详细介绍文案，用于角色详情页")
    @ExcelProperty("角色详细介绍文案，用于角色详情页")
    private String introText;

    @Schema(description = "角色性格标签数组（如：温柔、黏人、治愈）")
    @ExcelProperty("角色性格标签数组（如：温柔、黏人、治愈）")
    private List<String> personalityTags;

    @Schema(description = "角色说话风格（如：撒娇型、理性型、活泼型）")
    @ExcelProperty("角色说话风格（如：撒娇型、理性型、活泼型）")
    private String speakingStyle;

    @Schema(description = "AI系统Prompt，定义角色核心人设，仅供模型使用", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("AI系统Prompt，定义角色核心人设，仅供模型使用")
    private String systemPrompt;

    @Schema(description = "角色状态：1=上线，0=下线", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty("角色状态：1=上线，0=下线")
    private Short status;

    @Schema(description = "角色可见性：1=公开，2=内测，3=隐藏", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("角色可见性：1=公开，2=内测，3=隐藏")
    private Short visibility;

    @Schema(description = "排序权重，数值越大排序越靠前")
    @ExcelProperty("排序权重，数值越大排序越靠前")
    private Integer sortOrder;

    @Schema(description = "角色热度评分，用于推荐排序")
    @ExcelProperty("角色热度评分，用于推荐排序")
    private Integer popularityScore;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createdAt;

    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("更新时间")
    private LocalDateTime updatedAt;

    @Schema(description = "开场白")
    @ExcelProperty("开场白")
    private String prologue;

    @Schema(description = "开场白音频")
    @ExcelProperty("开场白音频")
    private String prologueAudio;

    @Schema(description = "音频Id", example = "31328")
    @ExcelProperty("音频Id")
    private String voiceId;

}