// Package entity add by blacknc <blacknc@163.com> at 2023/01/03 19:34:01
package entity

import (
	"database/sql"
	"time"

	"github.com/tidbcloud/dataservices/idl/pbgen/proto/dataapi"
)

type ConnectionInput struct {
	ProjectId  uint64
	ClusterId  uint64
	Database   string
	ExpireTime time.Duration
	Credential *dataapi.Credential
	Force      bool

	MaxIdleConns *int
	MaxOpenConns *int

	ConnectionSource string
}

type ConnectionOutput struct {
	DB       *sql.DB
	ExpireAt int64
	JwtMd5   string
}

type Chat2QueryReq struct {
	ClusterID   uint64   `json:"cluster_id,string"`
	Database    string   `json:"database"`
	Instruction string   `json:"instruction"`
	QuestionNum int      `json:"question_num"`
	Tables      []string `json:"tables"`
	// only need to support single table
	SampleData []map[string]interface{} `json:"sample_data"`
	// support multiple table
	DatabaseSchema map[string][]ColumnDescription `json:"database_schema"`
}
type ColumnDescription struct {
	Column      string `json:"column"`
	Type        string `json:"type"`
	Description string `json:"description"`
}

type Chat2QueryParam struct {
	OrgID                 uint64   `json:"org_id"`
	ProjectID             uint64   `json:"project_id"`
	ClusterID             uint64   `json:"cluster_id"`
	Database              string   `json:"database"`
	Instruction           string   `json:"instruction"`
	Apikey                string   `json:"api_key"`
	PromptTemplate        string   `json:"prompt_template"`
	PromptTemplateVersion string   `json:"prompt_template_version"`
	ShowInternalInfo      bool     `json:"show_internal_info"`
	QuestionNum           int      `json:"question_num"`
	Chat2QuerySid         string   `json:"chat2query_sid"`
	Tables                []string `json:"tables"`
	SampleData            string   `json:"sample_data"`
	DatabaseSchema        string   `json:"database_schema"`
	Timeout               int      `json:"timeout"`
	AppID                 uint64   `json:"app_id"`
	Endpoint              string   `json:"endpoint"`
}
