package app

import (
	"context"
	"time"

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

func (store *Store) bindWorkflowRunMessageSource(
	ctx context.Context, tx coredb.Tx,
	workspaceID string, source message.ContributionSource,
	messageID, clientMessageID string,
	createdAt time.Time,
) error {
	source = source.Normalize()
	if source.SkipWorkflowRunMessageBinding {
		return nil
	}
	if source.Kind != message.ContributionSourceKindWorkflowRun || source.RefType != message.ContributionSourceRefTypeWorkflowRun {
		return nil
	}
	// Approval feedback uses the Workflow contribution source for provenance,
	// but its ordinary Human message is bound to the approval effect by the
	// same ResolveAwaitingEffect transaction rather than by a send_message
	// effect binding row.
	if source.EventType == "approval_feedback" {
		return nil
	}
	_, err := run.New(store.db).InTx(tx).BindWorkflowRunMessage(ctx, run.WorkflowRunMessageBinding{
		WorkspaceID:     workspaceID,
		RunID:           source.RefID,
		EffectID:        source.EventID,
		MessageID:       messageID,
		ClientMessageID: clientMessageID,
		Now:             createdAt,
	})
	return err
}
