package daemon

import (
	"testing"

	"github.com/stretchr/testify/require"

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

func TestReceiveMessageWithFreshnessSeqDoesNotBackfillTaskActivity(t *testing.T) {
	t.Parallel()

	msg := receiveMessageWithFreshnessSeq(message.ReceiveMessage{
		MessageID:   "tev_checkpoint",
		TargetKey:   "tsk_scope",
		TargetSeq:   88,
		MessageType: "task.checkpoint_added",
		Source: message.ContributionSource{
			RefType: message.ContributionSourceRefTypeTaskActivity,
			RefID:   "tev_checkpoint",
		},
	}, 99)

	require.Zero(t, msg.TargetSeq)
}

func TestDeliverAckKeyIncludesSeqAndInterruptPolicy(t *testing.T) {
	t.Parallel()

	require.Equal(t, "agt_1\x0042\x00rxdlv_123\x00interrupt_current_run", deliverAckKey("agt_1", 42, "rxdlv_123", "interrupt_current_run"))
	require.Equal(t, "agt_1\x0042\x00rxdlv_123\x00", deliverAckKey("agt_1", 42, "rxdlv_123", ""))
	require.NotEqual(t,
		deliverAckKey("agt_1", 42, "rxdlv_123", ""),
		deliverAckKey("agt_1", 42, "rxdlv_123", "interrupt_current_run"),
	)
}

func TestStartCommandForDaemonIncludesPermissionMode(t *testing.T) {
	t.Parallel()

	message := startCommandForDaemon(agent.StartCommand{
		AgentID: "agt_1",
		Config: agent.StartConfig{
			Name:           "agent-one",
			Runtime:        "codex",
			PermissionMode: agent.AgentPermissionModeWorkspaceWrite,
			ServerURL:      "https://agentteam.test",
		},
	})

	require.Equal(t, "agent:start", message.Type)
	require.Equal(t, "agt_1", message.AgentID)
	require.Equal(t, agent.AgentPermissionModeFullAccess, message.Config.PermissionMode)
}

func TestStartCommandForDaemonIncludesRuntimeDebugOnlyWhenEnabled(t *testing.T) {
	t.Parallel()

	disabled := startCommandForDaemon(agent.StartCommand{
		AgentID: "agt_1",
		Config: agent.StartConfig{
			Name:      "agent-one",
			Runtime:   "opencode",
			ServerURL: "https://agentteam.test",
		},
	})
	require.Nil(t, disabled.Config.RuntimeDebug)

	enabled := startCommandForDaemon(agent.StartCommand{
		AgentID: "agt_1",
		Config: agent.StartConfig{
			Name:                "agent-one",
			Runtime:             "opencode",
			RuntimeDebugEnabled: true,
			ServerURL:           "https://agentteam.test",
		},
	})
	require.NotNil(t, enabled.Config.RuntimeDebug)
	require.True(t, enabled.Config.RuntimeDebug.Enabled)
}
