package response

import (
	"agent-desk/internal/models"
	"agent-desk/internal/pkg/enums"
)

type AIAgentTeamResponse struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
}

type AIAgentSkillResponse struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
}

type AIAgentMCPToolResponse struct {
	ToolCode    string            `json:"toolCode"`
	ServerCode  string            `json:"serverCode"`
	ToolName    string            `json:"toolName"`
	Title       string            `json:"title"`
	Description string            `json:"description"`
	Arguments   map[string]string `json:"arguments"`
}

type AIConfigResponse struct {
	ID               int64             `json:"id"`
	Name             string            `json:"name"`
	Provider         enums.AIProvider  `json:"provider"`
	BaseURL          string            `json:"baseUrl"`
	HasAPIKey        bool              `json:"hasApiKey"`
	ModelType        enums.AIModelType `json:"modelType"`
	ModelName        string            `json:"modelName"`
	Dimension        int               `json:"dimension"`
	MaxContextTokens int               `json:"maxContextTokens"`
	MaxOutputTokens  int               `json:"maxOutputTokens"`
	TimeoutMS        int               `json:"timeoutMs"`
	MaxRetryCount    int               `json:"maxRetryCount"`
	RPMLimit         int               `json:"rpmLimit"`
	TPMLimit         int               `json:"tpmLimit"`
	Status           enums.Status      `json:"status"`
	SortNo           int               `json:"sortNo"`
	Remark           string            `json:"remark"`
}

func BuildAIConfigResponse(item *models.AIConfig) AIConfigResponse {
	return AIConfigResponse{
		ID:               item.ID,
		Name:             item.Name,
		Provider:         item.Provider,
		BaseURL:          item.BaseURL,
		HasAPIKey:        item.APIKey != "",
		ModelType:        item.ModelType,
		ModelName:        item.ModelName,
		Dimension:        item.Dimension,
		MaxContextTokens: item.MaxContextTokens,
		MaxOutputTokens:  item.MaxOutputTokens,
		TimeoutMS:        item.TimeoutMS,
		MaxRetryCount:    item.MaxRetryCount,
		RPMLimit:         item.RPMLimit,
		TPMLimit:         item.TPMLimit,
		Status:           item.Status,
		SortNo:           item.SortNo,
		Remark:           item.Remark,
	}
}

type AIAgentResponse struct {
	ID                  int64                           `json:"id"`
	Name                string                          `json:"name"`
	Description         string                          `json:"description"`
	Status              enums.Status                    `json:"status"`
	StatusName          string                          `json:"statusName"`
	AIConfigID          int64                           `json:"aiConfigId"`
	AIConfigName        string                          `json:"aiConfigName"`
	ServiceMode         enums.IMConversationServiceMode `json:"serviceMode"`
	ServiceModeName     string                          `json:"serviceModeName"`
	SystemPrompt        string                          `json:"systemPrompt"`
	WelcomeMessage      string                          `json:"welcomeMessage"`
	ReplyTimeoutSeconds int                             `json:"replyTimeoutSeconds"`
	Teams               []AIAgentTeamResponse           `json:"teams"`
	HandoffMode         enums.AIAgentHandoffMode        `json:"handoffMode"`
	HandoffModeName     string                          `json:"handoffModeName"`
	FallbackMode        enums.AIAgentFallbackMode       `json:"fallbackMode"`
	FallbackModeName    string                          `json:"fallbackModeName"`
	FallbackMessage     string                          `json:"fallbackMessage"`
	KnowledgeIDs        []int64                         `json:"knowledgeIds"`
	KnowledgeBaseNames  []string                        `json:"knowledgeBaseNames"`
	SkillIDs            []int64                         `json:"skillIds"`
	Skills              []AIAgentSkillResponse          `json:"skills"`
	DirectTools         []AIAgentMCPToolResponse        `json:"directTools"`
	GraphTools          []string                        `json:"graphTools"`
	WorkflowVersionID   int64                           `json:"workflowVersionId"`
	WorkflowPublished   bool                            `json:"workflowPublished"`
	WorkflowState       string                          `json:"workflowState"`
	WorkflowStateText   string                          `json:"workflowStateText"`
	SortNo              int                             `json:"sortNo"`
	CreatedAt           string                          `json:"createdAt"`
	UpdatedAt           string                          `json:"updatedAt"`
	CreateUserName      string                          `json:"createUserName"`
	UpdateUserName      string                          `json:"updateUserName"`
}
