package model

import "time"

// Role 消息角色
type Role string

const (
	RoleSystem    Role = "system"
	RoleUser      Role = "user"
	RoleAssistant Role = "assistant"
	RoleTool      Role = "tool"
)

// LLMMessage 发送给LLM的消息
type LLMMessage struct {
	Role             Role       `json:"role"`
	Content          string     `json:"content"`
	Images           []string   `json:"images,omitempty"`            // 图片 base64 data URL 列表 (多模态)
	VideoURLs        []string   `json:"video_urls,omitempty"`        // 视频 URL 列表 (多模态)
	Name             string     `json:"name,omitempty"`              // 可选发送者名称
	ToolCallID       string     `json:"tool_call_id,omitempty"`       // 工具调用关联ID (tool role 消息关联调用)
	ToolCalls        []ToolCall `json:"tool_calls,omitempty"`         // 助手消息中的工具调用列表
	ReasoningContent string     `json:"reasoning_content,omitempty"` // DeepSeek 思考链内容（需回传）
	Timestamp        time.Time  `json:"timestamp,omitempty"`         // 消息时间
}

// ImageContent is a multimodal content part for images.
type ImageContent struct {
	Type     string    `json:"type"`
	Text     string    `json:"text,omitempty"`
	ImageURL *ImageURL `json:"image_url,omitempty"`
}

// ImageURL holds an image URL (can be a data: URL or http: URL).
type ImageURL struct {
	URL    string `json:"url"`
	Detail string `json:"detail,omitempty"` // low, high, auto
}

// VideoURLContent holds a video URL for multimodal video understanding.
type VideoURLContent struct {
	VideoURL *VideoURL `json:"video_url,omitempty"`
}

// VideoURL holds a video URL.
type VideoURL struct {
	URL string `json:"url"`
}

// ChatMessage 数据库存储的对话消息
type ChatMessage struct {
	ID        string    `json:"id" db:"id"`
	SessionID string    `json:"session_id" db:"session_id"`
	UserID    string    `json:"user_id" db:"user_id"`
	Role      Role      `json:"role" db:"role"`
	Content   string    `json:"content" db:"content"`
	Mode      string    `json:"mode" db:"mode"` // text | voice_msg | voice_assistant
	CreatedAt time.Time `json:"created_at" db:"created_at"`
}

// LLMResponse LLM返回的响应
type LLMResponse struct {
	Content          string      `json:"content"`
	FinishReason     string      `json:"finish_reason"` // stop | length | tool_calls
	ToolCalls        []ToolCall  `json:"tool_calls,omitempty"`
	Usage            Usage       `json:"usage,omitempty"`
	ReasoningContent string      `json:"reasoning_content,omitempty"` // DeepSeek 思考链内容
}

// ToolCall 工具调用
type ToolCall struct {
	ID        string `json:"id"`
	Name      string `json:"name"`
	Arguments string `json:"arguments"`
}

// Usage token用量统计
type Usage struct {
	PromptTokens     int `json:"prompt_tokens"`
	CompletionTokens int `json:"completion_tokens"`
	TotalTokens      int `json:"total_tokens"`
}
