package promptcompiler

import "github.com/tidbcloud/AgentTeam/desktop/prompts"

type deliveryReplyPromptInput struct {
	promptInputMetadata
	data DeliveryReplyTemplateData
}

func (v deliveryReplyPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newDeliveryReplyPromptInput(data DeliveryReplyTemplateData) PromptBlockInput {
	return deliveryReplyPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputMessage, name: "DeliveryReplyTemplateData"}, data: data}
}

type deliveryReplayPromptInput struct {
	promptInputMetadata
	data DeliveryReplayTemplateData
}

func (v deliveryReplayPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newDeliveryReplayPromptInput(data DeliveryReplayTemplateData) PromptBlockInput {
	return deliveryReplayPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputRecovery, name: "DeliveryReplayTemplateData"}, data: data}
}

type activeTaskPromptInput struct {
	promptInputMetadata
	data ActiveTaskTemplateData
}

func (v activeTaskPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newActiveTaskPromptInput(data ActiveTaskTemplateData) PromptBlockInput {
	return activeTaskPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputActiveTask, name: "ActiveTaskTemplateData"}, data: data}
}

type activeTaskNormalPromptInput struct {
	promptInputMetadata
	data ActiveTaskNormalRoutingTemplateData
}

func (v activeTaskNormalPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newActiveTaskNormalPromptInput(data ActiveTaskNormalRoutingTemplateData) PromptBlockInput {
	return activeTaskNormalPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputActiveTask, name: "ActiveTaskNormalRoutingTemplateData"}, data: data}
}

type workflowPromptInput struct {
	promptInputMetadata
	data WorkflowTemplateData
}

func (v workflowPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newWorkflowPromptInput(data WorkflowTemplateData) PromptBlockInput {
	return workflowPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputWorkflow, name: "WorkflowTemplateData"}, data: data}
}

type teamPromptInput struct {
	promptInputMetadata
	data TeamPromptTemplateData
}

func (v teamPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newTeamPromptInput(data TeamPromptTemplateData) PromptBlockInput {
	return teamPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputTeam, name: "TeamPromptTemplateData"}, data: data}
}

type taskReplyPromptInput struct {
	promptInputMetadata
	data TaskReplyTemplateData
}

func (v taskReplyPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newTaskReplyPromptInput(data TaskReplyTemplateData) PromptBlockInput {
	return taskReplyPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputTask, name: "TaskReplyTemplateData"}, data: data}
}

type taskScopeReplyPromptInput struct {
	promptInputMetadata
	data TaskScopeReplyTemplateData
}

func (v taskScopeReplyPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newTaskScopeReplyPromptInput(data TaskScopeReplyTemplateData) PromptBlockInput {
	return taskScopeReplyPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputTask, name: "TaskScopeReplyTemplateData"}, data: data}
}

type runtimePolicyPromptInput struct {
	promptInputMetadata
	data KimiRestrictedSystemTemplateData
}

func (v runtimePolicyPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newRuntimePolicyPromptInput(data KimiRestrictedSystemTemplateData) PromptBlockInput {
	return runtimePolicyPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputRuntimePolicy, name: "KimiRestrictedSystemTemplateData"}, data: data}
}

type threadContextPromptInput struct {
	promptInputMetadata
	data ThreadContextTemplateData
}

func (v threadContextPromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newThreadContextPromptInput(data ThreadContextTemplateData) PromptBlockInput {
	return threadContextPromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputMessage, name: "ThreadContextTemplateData"}, data: data}
}

type memorySearchGuidancePromptInput struct {
	promptInputMetadata
	data MemorySearchGuidanceTemplateData
}

func (v memorySearchGuidancePromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newMemorySearchGuidancePromptInput(data MemorySearchGuidanceTemplateData) PromptBlockInput {
	return memorySearchGuidancePromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputSkillPlan, name: "MemorySearchGuidanceTemplateData"}, data: data}
}

type externalSkillCorePromptInput struct {
	promptInputMetadata
	data ExternalSkillPayloadTemplateData
}

func (v externalSkillCorePromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newExternalSkillCorePromptInput(data ExternalSkillPayloadTemplateData) PromptBlockInput {
	return externalSkillCorePromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputSkillPlan, name: "ExternalSkillPayloadTemplateData"}, data: data}
}

type externalSkillReferencePromptInput struct {
	promptInputMetadata
	data ExternalSkillPayloadTemplateData
}

func (v externalSkillReferencePromptInput) renderPromptBlock(spec PromptBlockSpec) (string, error) {
	if err := validatePromptTemplateSpec(spec); err != nil {
		return "", err
	}
	return prompts.Render(spec.TemplatePath, v.data)
}
func newExternalSkillReferencePromptInput(data ExternalSkillPayloadTemplateData) PromptBlockInput {
	return externalSkillReferencePromptInput{promptInputMetadata: promptInputMetadata{kind: PromptInputSkillPlan, name: "ExternalSkillPayloadTemplateData"}, data: data}
}
