package types

import (
	"github.com/tidbcloud/aitestsuit/internal/entity"
)

type PaginationQuerySchema struct {
	Page    int `form:"page" binding:"required,min=1,max=200"`
	PerPage int `form:"per_page,default=200" binding:"min=1,max=200"`
}

type GetCasesByPlanIDSchema struct {
	PlanID int `form:"plan_id" json:"plan_id" uri:"plan_id"`
}

type GetByIDSchema struct {
	ID uint `form:"id" json:"id" uri:"id"`
}

type CreateDataSetSchema struct {
	Name string `json:"name"`
}

type CreateTestRunSchema struct {
	Name             string        `json:"name"`
	PlanID           uint          `json:"plan_id"`
	Params           entity.Params `json:"params"`
	PromptTemplateID uint          `json:"prompt_template_id"`
}

type CreatePromptTemplateSchema struct {
	Version string `json:"version" binding:"required"`
	Content string `json:"content" binding:"required"`
}

type GetReportsFilterSchema struct {
	PlanID uint `form:"plan_id"`
	RunID  uint `form:"run_id"`
}

type GetReportDetailFilterSchema struct {
	ResultAStatus int `form:"resulta_status"`
}

type CreateTestPlanSchema struct {
	Type        string `json:"type"` // 1. SQL Generator 2. DBName Selector   3. Gen Question
	Creator     string `json:"creator"`
	Name        string `json:"name"`
	Description string `json:"description"`
	AIModelID   uint   `json:"ai_model_id"`
}

type CreateTestCaseSchema struct {
	PlanID      uint               `json:"plan_id"`
	Question    string             `json:"question"`
	Database    string             `json:"database"`
	Table       string             `json:"table"`
	SQL         string             `json:"sql"`
	ColumnNames []string           `json:"column_names"`
	CompareArgs entity.CompareArgs `json:"compare_args"`
}

type UpdateTestCaseSchema struct {
	ID uint `json:"id" binding:"required"`

	CreateTestCaseSchema
}

type GetStatsSchema struct {
	PlanIDs string `form:"plan_ids"`
}

type ChartInfo struct {
	ChartName string                 `json:"chartName"`
	Title     string                 `json:"title"`
	Options   map[string]interface{} `json:"options"`
}

type Chat2ChartInfo struct {
	Sql       string    `json:"sql"`
	ChartInfo ChartInfo `json:"chart"`
	Questions []string  `json:"questions"`
}

type CreateAIModelSchema struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	ModelType   string `json:"model_type"`
}

type UpdateAIModelSchema struct {
	ID uint `json:"id" binding:"required"`

	CreateAIModelSchema
}

type GetCurrentAIModelPromptSchema struct {
	AIModel    string `form:"ai_model"`
	Deployment string `form:"deployment"`
}

type GetAllAIModelPromptsSchema struct {
	AIModel    string `form:"ai_model"`
	Deployment string `form:"deployment"`
}

type ReleaseAIModelPromptSchema struct {
	ID         uint   `json:"id" binding:"required"`
	AIModel    string `json:"ai_model" binding:"required"`
	Deployment string `json:"deployment" binding:"required"`
}
