package dto

import "message-service/internal/bean/entity"

type CreateCompletionParam struct {
	Model       string   `json:"model"`
	Prompt      []string `json:"prompt"`
	MaxTokens   int32    `json:"max_tokens"`
	Temperature float32  `json:"temperature"`
	TopP        float32  `json:"top_p"`
	N           int32    `json:"n"`
	Stream      bool     `json:"stream"`
	Logprobs    int32    `json:"logprobs"`
	Stop        []string `json:"stop"`
}

type CreateCompletionResult struct {
	Id      string `json:"id"`
	Object  string `json:"object"`
	Created int    `json:"created"`
	Model   string `json:"model"`
	Choices []struct {
		Text         string      `json:"text"`
		Index        int         `json:"index"`
		Logprobs     interface{} `json:"logprobs"`
		FinishReason string      `json:"finish_reason"`
	} `json:"choices"`
	Usage struct {
		PromptTokens     int `json:"prompt_tokens"`
		CompletionTokens int `json:"completion_tokens"`
		TotalTokens      int `json:"total_tokens"`
	} `json:"usage"`
}

type InteractRequest struct {
	SessionID             string `json:"session_id"`
	Question              string `json:"question"`
	BotType               string `json:"bot_type"`
	ProjectID             uint64 `json:"-"`
	ClusterID             string `json:"cluster_id,omitempty"`
	Database              string `json:"database,omitempty"`
	PromptTemplate        string `json:"prompt_template"`
	PromptTemplateVersion string `json:"prompt_template_version"`
}

type InteractResponse struct {
	SessionID     string `json:"session_id"`
	Question      string `json:"question"`
	Prompt        string `json:"prompt"`
	Response      string `json:"response"`
	Code          int    `json:"code"`
	StartTime     string `json:"start_time"`
	EndTime       string `json:"end_time"`
	StartTimeMS   int64  `json:"start_time_ms"`
	EndTimeMS     int64  `json:"end_time_ms"`
	ExecuteTime   string `json:"execute_time"`
	PromptVersion string `json:"prompt_version"`
	TokenUsed     int    `json:"token_used"`
}

type UserInfo struct {
	UserID uint64 `json:"user_id"`
	Email  string `json:"email"`
}

type SqlEditorGetColumnParam struct {
	OrgID     string `json:"org_id"`
	ProjectID string `json:"project_id"`
	ClusterID string `json:"cluster_id"`
	DbName    string `json:"db_name"`
	TableName string `json:"table_name"`
}

type SqlEditorGetColumnResult struct {
	Code int `json:"code"`
	Data struct {
		Clusterid int    `json:"clusterid"`
		Database  string `json:"database"`
		Table     string `json:"table"`
		Columns   []struct {
			Col      string `json:"col"`
			DataType string `json:"data_type"`
			Nullable bool   `json:"nullable"`
		} `json:"columns"`
	} `json:"data"`
	Message string `json:"message"`
}

type InteractRecFilter struct {
	ID        []uint64 `json:"id" form:"id"`
	SessionID string   `json:"session_id" form:"session_id"`
	Question  string   `json:"question" form:"question"`
}

type ListInteractRecParam struct {
	Filter   InteractRecFilter
	SortBy   string `json:"sort_by" form:"sort_by"`
	Order    string `json:"order" form:"order"`
	PageNo   int    `json:"page_no" form:"page_no"`
	PageSize int    `json:"page_size" form:"page_size"`
}

type ListInteractRecResult struct {
	Total int64
	List  []*entity.BotInteractRecord
}
