package com.yolo.keyboard.dal.dataobject.aicompanion;

import com.baomidou.mybatisplus.annotation.*;
import com.yolo.keyboard.framework.mybatis.core.type.TextArrayTypeHandler;
import com.yolo.keyboard.framework.tenant.core.aop.TenantIgnore;
import lombok.*;

import java.time.LocalDateTime;
import java.util.List;
import com.yolo.keyboard.framework.mybatis.core.dataobject.BaseDO;

/**
 * AI陪聊角色表，用于定义恋爱/陪伴型虚拟角色的基础信息与人设 DO
 *
 * @author ziin
 */
@TableName(value = "keyboard_ai_companion", autoResultMap = true)
@KeySequence("keyboard_ai_companion_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TenantIgnore
public class KeyboardAiCompanionDO {

    /**
     * 陪聊角色唯一ID
     */
    @TableId
    private Long id;

    /**
     * 角色头像URL，用于列表页和聊天页
     */
    private String avatarUrl;
    /**
     * 角色封面图URL，用于角色详情页
     */
    private String coverImageUrl;
    /**
     * 角色性别（male / female / other）
     */
    private String gender;
    /**
     * 角色年龄段描述（如：20s、25-30）
     */
    private String ageRange;
    /**
     * 角色性格标签数组（如：温柔、黏人、治愈）
     */
    @TableField(typeHandler = TextArrayTypeHandler.class)
    private List<String> personalityTags;
    /**
     * 角色说话风格（如：撒娇型、理性型、活泼型）
     */
    private String speakingStyle;
    /**
     * AI系统Prompt，定义角色核心人设，仅供模型使用
     */
    private String systemPrompt;
    /**
     * 角色状态：1=上线，0=下线
     */
    private Short status;
    /**
     * 角色可见性：1=公开，2=内测，3=隐藏
     */
    private Short visibility;
    /**
     * 排序权重，数值越大排序越靠前
     */
    private Integer sortOrder;
    /**
     * 角色热度评分，用于推荐排序
     */
    private Integer popularityScore;
    /**
     * 创建时间
     */
    private LocalDateTime createdAt;
    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
    /**
     * 音频Id
     */
    private String voiceId;
    /**
     * 是否删除
     */
    @TableLogic
    private Byte deleted;

}