package llm

import (
	"context"

	"github.com/hhs/camtalk/internal/models"
)

// Service 多模态大模型服务契约。
type Service interface {
	// ChatStream 流式推理，返回增量文本的 channel。
	// 调用方必须消费 channel 直到 Done=true，否则需 cancel ctx 以释放连接。
	ChatStream(ctx context.Context, req Request) (<-chan Chunk, error)
}

// Request 推理请求。
type Request struct {
	Image        []byte           // JPEG 图片（已从 Base64 解码）
	Text         string           // 用户语音识别后的文本
	History      []models.Message // 最近 N 轮对话历史
	Language     string           // 语言，如 "zh-CN"
	SystemPrompt string           // 情景自定义 system prompt（非空时覆盖默认 prompt）
}

// Chunk 流式推理的一个增量片段。
type Chunk struct {
	Delta      string       // 增量文本
	Done       bool         // 是否结束
	TokensUsed *TokenUsage  // 仅 Done=true 时有值
	Model      string       // 实际使用的模型名
}

// TokenUsage 用量统计。
type TokenUsage struct {
	Prompt     int
	Completion int
	Total      int
}
