package agent

import (
	"context"
	"fmt"
	"strings"

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

// GetTaskActiveTarget returns a persisted task-routing target for daemon wake delivery.
func (service *Service) GetTaskActiveTarget(ctx context.Context, workspaceID string, scope string, targetKey string) (message.ReceiveActiveTaskTarget, bool, error) {
	if service == nil || service.db == nil {
		return message.ReceiveActiveTaskTarget{}, false, fmt.Errorf("agent active target store is not configured")
	}
	normalizedWorkspaceID := strings.TrimSpace(workspaceID)
	normalizedScope := strings.TrimSpace(scope)
	normalizedTargetKey := strings.TrimSpace(targetKey)
	if normalizedWorkspaceID == "" || normalizedScope == "" || normalizedTargetKey == "" {
		return message.ReceiveActiveTaskTarget{}, false, nil
	}

	var target message.ReceiveActiveTaskTarget
	if err := service.db.QueryRow(ctx, `
SELECT
	  CASE WHEN COALESCE(p.slug, '') != '' THEN CONCAT('#', p.slug) ELSE tat.task_channel_id END,
  tat.task_number,
  tat.source,
  tat.thread_target,
  tat.role,
  tat.root_task_number
FROM task_active_targets tat
LEFT JOIN scope_channel_profiles p ON p.scope_id = tat.task_channel_id AND p.workspace_id = tat.workspace_id
WHERE tat.workspace_id = $1 AND tat.scope = $2 AND tat.target_key = $3
`, normalizedWorkspaceID, normalizedScope, normalizedTargetKey).Scan(
		&target.Channel,
		&target.TaskNumber,
		&target.Source,
		&target.ThreadTarget,
		&target.Role,
		&target.RootTaskNumber,
	); err != nil {
		if coredb.IsNotFound(err) {
			return message.ReceiveActiveTaskTarget{}, false, nil
		}
		return message.ReceiveActiveTaskTarget{}, false, fmt.Errorf("load task active target: %w", err)
	}
	target = target.Normalize()
	return target, target.Valid(), nil
}
