package converter

import (
	"sort"

	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	"github.com/tidbcloud/AgentTeam/internal/store/agent"
)

func ToAgentDirectoryItems(items []agent.AgentDirectoryItem, includeReview bool) []dto.AgentDirectoryItem {
	if len(items) == 0 {
		return []dto.AgentDirectoryItem{}
	}
	out := make([]dto.AgentDirectoryItem, 0, len(items))
	for _, item := range items {
		out = append(out, ToAgentDirectoryItem(item, includeReview))
	}
	return out
}

func ToAgentDirectoryItem(item agent.AgentDirectoryItem, includeReview bool) dto.AgentDirectoryItem {
	dtoItem := dto.AgentDirectoryItem{
		ID:                 item.ID,
		Name:               item.Name,
		MemberID:           item.MemberID,
		DisplayName:        item.DisplayName,
		AvatarURL:          item.AvatarURL,
		OwnerUserID:        item.OwnerUserID,
		MachineID:          item.MachineID,
		CanManage:          item.CanManage,
		TeamID:             item.TeamID,
		TeamDisplayName:    item.TeamDisplayName,
		CurrentRoleBinding: toAgentRoleBindingSummary(item.CurrentRoleBinding),
		InChannel:          item.InChannel,
	}
	if includeReview {
		canReview := item.CanReview
		dtoItem.CanReview = &canReview
	}
	return dtoItem
}

func ToAgentRuntimeFailureItems(failures map[string]agent.AgentRuntimeFailureSummary) []dto.AgentRuntimeFailureItem {
	if len(failures) == 0 {
		return []dto.AgentRuntimeFailureItem{}
	}
	agentIDs := make([]string, 0, len(failures))
	for agentID := range failures {
		agentIDs = append(agentIDs, agentID)
	}
	sort.Strings(agentIDs)

	items := make([]dto.AgentRuntimeFailureItem, 0, len(agentIDs))
	for _, agentID := range agentIDs {
		failure := failures[agentID]
		items = append(items, dto.AgentRuntimeFailureItem{
			AgentID: agentID,
			Failure: ToAgentRuntimeFailure(&failure),
		})
	}
	return items
}
