package app

import (
	"time"

	"gorm.io/datatypes"
	"gorm.io/gorm"
)

// AICharacter 角色卡模型
type AICharacter struct {
	ID        uint           `gorm:"primarykey" json:"id"`
	CreatedAt time.Time      `json:"createdAt"`
	UpdatedAt time.Time      `json:"updatedAt"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`

	// 基本信息
	UserID   uint   `gorm:"index;not null" json:"userId"`           // 所属用户ID
	Name     string `gorm:"type:varchar(100);not null" json:"name"` // 角色名称
	Avatar   string `gorm:"type:text" json:"avatar"`                // 头像URL或Base64
	Creator  string `gorm:"type:varchar(100)" json:"creator"`       // 创建者
	Version  string `gorm:"type:varchar(50)" json:"version"`        // 角色版本
	IsPublic bool   `gorm:"default:false" json:"isPublic"`          // 是否公开

	// SillyTavern V2 格式字段
	Description             string         `gorm:"type:text" json:"description"`                         // 角色描述
	Personality             string         `gorm:"type:text" json:"personality"`                         // 性格特征
	Scenario                string         `gorm:"type:text" json:"scenario"`                            // 场景设定
	FirstMes                string         `gorm:"type:text" json:"firstMes"`                            // 第一条消息
	MesExample              string         `gorm:"type:text" json:"mesExample"`                          // 消息示例
	CreatorNotes            string         `gorm:"type:text" json:"creatorNotes"`                        // 创建者备注
	SystemPrompt            string         `gorm:"type:text" json:"systemPrompt"`                        // 系统提示词
	PostHistoryInstructions string         `gorm:"type:text" json:"postHistoryInstructions"`             // 历史后指令
	Tags                    datatypes.JSON `gorm:"type:jsonb" json:"tags"`                               // 标签数组
	AlternateGreetings      datatypes.JSON `gorm:"type:jsonb" json:"alternateGreetings"`                 // 备用问候语
	CharacterBook           datatypes.JSON `gorm:"type:jsonb" json:"characterBook"`                      // 角色书
	Extensions              datatypes.JSON `gorm:"type:jsonb" json:"extensions"`                         // 扩展数据
	Spec                    string         `gorm:"type:varchar(50);default:'chara_card_v2'" json:"spec"` // 规范名称
	SpecVersion             string         `gorm:"type:varchar(50);default:'2.0'" json:"specVersion"`    // 规范版本

	// 统计信息
	UseCount      int `gorm:"default:0" json:"useCount"`      // 使用次数
	FavoriteCount int `gorm:"default:0" json:"favoriteCount"` // 收藏次数
}

// TableName 指定表名
func (AICharacter) TableName() string {
	return "ai_characters"
}
