package agent

import (
	"context"
	"fmt"
	"strings"

	"github.com/tidbcloud/AgentTeam/internal/store/agent"
	"github.com/tidbcloud/AgentTeam/internal/store/message"
)

func (h *TaskHandler) resolveAgentCreateTaskSource(ctx context.Context, authenticatedAgent agent.AuthenticatedAgent, sourceTarget string) (message.TaskCommandTarget, *CreateTaskMetadata, error) {
	if h.resolver == nil {
		return message.TaskCommandTarget{}, nil, fmt.Errorf("task target resolver is not configured")
	}
	target, err := h.resolver.ResolveTaskSourceTargetForAgent(ctx, authenticatedAgent, sourceTarget)
	if err != nil {
		return message.TaskCommandTarget{}, nil, err
	}
	if strings.TrimSpace(target.SourceThreadParentChannelID) == "" || strings.TrimSpace(target.SourceThreadParentMessageID) == "" {
		return target, nil, nil
	}
	metadata := &CreateTaskMetadata{
		SourceThreadChannelID:       strings.TrimSpace(target.SourceThreadChannelID),
		SourceThreadParentChannelID: strings.TrimSpace(target.SourceThreadParentChannelID),
		SourceThreadParentMessageID: strings.TrimSpace(target.SourceThreadParentMessageID),
		SourceThreadRef:             strings.TrimSpace(target.SourceThreadRef),
	}
	return target, metadata, nil
}

func (h *TaskHandler) applyAgentCreateTaskSource(ctx context.Context, authenticatedAgent agent.AuthenticatedAgent, sourceTarget string, request *CreateTasksRequest) error {
	if strings.TrimSpace(sourceTarget) == "" {
		return nil
	}
	target, metadata, err := h.resolveAgentCreateTaskSource(ctx, authenticatedAgent, sourceTarget)
	if err != nil {
		return err
	}
	if strings.TrimSpace(target.TaskChannelRef) != "" {
		request.Board = BoardRef{Channel: target.TaskChannelRef}
	}
	if metadata == nil {
		return nil
	}
	request.Metadata = metadata
	return nil
}

func (h *TaskHandler) resolveAgentTaskBoardChannel(ctx context.Context, authenticatedAgent agent.AuthenticatedAgent, channel string) (string, error) {
	return strings.TrimSpace(channel), nil
}
