package promptcompiler

import (
	"strings"

	"github.com/tidbcloud/AgentTeam/desktop/internal/types"
)

func toolNamePrefix(runtime, namespace string) types.ToolNamer {
	namespace = strings.TrimSpace(namespace)
	if namespace == "" {
		namespace = "agentteam"
	}
	prefix := runtimeToolPrefix(runtime, namespace)
	return func(name string) string {
		return prefix + strings.TrimSpace(name)
	}
}

func runtimeToolPrefix(runtime, namespace string) string {
	switch strings.TrimSpace(runtime) {
	case "claude", "codex", "kimi", "pi":
		return "mcp__" + namespace + "__"
	default:
		return "mcp_" + namespace + "_"
	}
}

func agentteamDisplayName() string {
	return "AgentTeam"
}

func buildIdentityText(agentName string) string {
	name := strings.TrimSpace(agentName)
	if name == "" {
		name = "agent"
	}
	return renderRegisteredPromptText("platform.identity", newIdentityPromptInput(IdentityTemplateData{AgentName: name, ChannelDisplayName: agentteamDisplayName()}))
}

func buildWhoYouAreText() string {
	return renderRegisteredPromptText("platform.who_you_are", newEmptyPromptInput(PromptInputIdentity))
}

func buildCooperationText() string {
	return renderRegisteredPromptText("platform.cooperation", newEmptyPromptInput(PromptInputIdentity))
}

func agentteamPlatformPromptData(runtime string) PlatformLoopTemplateData {
	toolName := toolNamePrefix(runtime, "agentteam")
	return PlatformLoopTemplateData{
		WorkStartupStep: "Do multi-step work that creates substantial tool output in the current session; do not defer it to a scheduled task or a future wake.",
		ReviewAddTool:   "agentteam exec review add", ReviewDeleteTool: "agentteam exec review delete", ReviewListTool: "agentteam exec review list",
		SendMessageTool: toolName("message_send"), ScheduledMessageCreateTool: "agentteam exec scheduled-message create",
		ScheduledMessageDeleteTool: "agentteam exec scheduled-message delete", ScheduledMessagePauseTool: "agentteam exec scheduled-message pause",
		ScheduledMessageResumeTool: "agentteam exec scheduled-message resume", ScheduledMessageUpdateTool: "agentteam exec scheduled-message update",
		ScheduledMessageValidateTool: "agentteam exec scheduled-message validate",
	}
}

func buildAgentTeamStartupText(runtime string) string {
	return renderRegisteredPromptText("platform.agentteam.startup", newPlatformLoopPromptInput(agentteamPlatformPromptData(runtime)))
}

func buildAgentTeamTaskBoardsText() string {
	return renderRegisteredPromptText("platform.agentteam.task_boards", newEmptyPromptInput(PromptInputTask))
}

func buildAgentTeamReviewContextText(runtime string) string {
	return renderRegisteredPromptText("platform.agentteam.review_context", newPlatformLoopPromptInput(agentteamPlatformPromptData(runtime)))
}

func buildDeliveryContractText(runtime string) string {
	sendMessageTool := toolNamePrefix(runtime, "agentteam")("message_send")
	return renderRegisteredPromptText("platform.agentteam.visible_reply_contract", newVisibleReplyPromptInput(VisibleReplyContractTemplateData{SendMessageTool: sendMessageTool}))
}

func buildInitialRoleText(description string) string {
	desc := strings.TrimSpace(description)
	if desc == "" {
		return ""
	}
	return renderRegisteredPromptText("agent_config.initial_role", newInitialRolePromptInput(InitialRoleTemplateData{Description: desc}))
}

func buildAgentsDocText(content string) string {
	content = strings.TrimSpace(content)
	if content == "" {
		return ""
	}
	return renderRegisteredPromptText("agent_config.agents_md", newWorkspaceDocumentPromptInput(WorkspaceDocumentTemplateData{Content: content}))
}
