package entity

import (
	"gorm.io/gorm"

	"github.com/tidbcloud/aipower/commons/config"
	"github.com/tidbcloud/aipower/commons/utils"
)

var Models = []interface{}{
	&BotInteractRecord{}, &RateLimit{}, &PromptTemplate{},
}

const (
	TableBotInteractRecord string = "bot_interact_record"
)

type BotInteractRecord struct {
	ID            uint64         `gorm:"column:id" json:"id"`
	SessionID     string         `gorm:"column:session_id;type:varchar(128)" json:"session_id"`
	AIModel       string         `gorm:"column:ai_model" json:"ai_model"`
	Question      string         `gorm:"column:question" json:"question"`
	QuestionCtx   string         `gorm:"column:question_ctx" json:"question_ctx"`
	Prompt        string         `gorm:"column:prompt" json:"prompt"`
	PromptVersion string         `gorm:"column:prompt_version" json:"prompt_version"`
	Response      string         `gorm:"column:response" json:"response"`
	Error         string         `gorm:"column:error;default:''" json:"error"`
	CreatedBy     string         `gorm:"column:created_by;type:varchar(256)" json:"created_by"`
	CreatedAt     utils.JsonTime `gorm:"column:created_at" json:"created_at"`
	UpdatedAt     utils.JsonTime `gorm:"column:updated_at" json:"updated_at"`
	ExecuteTime   string         `gorm:"column:execute_time" json:"execute_time"`
}

func (BotInteractRecord) TableName() string {
	return config.Global().QueryLogConf.Table
}

type RateLimit struct {
	gorm.Model

	Identifier string `json:"identifier" gorm:"type:varchar(256);uniqueIndex"`
	Count      int    `json:"count"`
}

type PromptTemplate struct {
	gorm.Model

	AIModel    string `json:"ai_model" gorm:"index"` // chat2query/chat2chart...
	Deployment string `json:"deployment"`
	Version    string `json:"version" gorm:"uniqueIndex,size:32"`
	Content    string `json:"content"`
}
