package taskboard

import (
	"database/sql"
	"testing"

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

func TestTaskPrincipalProfileDrivesLegacyTaskIdentity(t *testing.T) {
	projection := taskActorProjection{
		MemberType:        sql.NullString{String: memberTypeAgent, Valid: true},
		MemberID:          sql.NullString{String: "mem_agent", Valid: true},
		AgentID:           sql.NullString{String: "agt_seed", Valid: true},
		AgentName:         sql.NullString{String: "agent-slug", Valid: true},
		AgentAvatarURL:    sql.NullString{String: "https://example.test/agent.png", Valid: true},
		MemberDisplayName: sql.NullString{String: "Seed Agent", Valid: true},
	}

	profile, err := taskPrincipalProfileFromProjection("assignee", projection, true)
	if err != nil {
		t.Fatalf("taskPrincipalProfileFromProjection returned error: %v", err)
	}
	if profile == nil || profile.ActorType != message.AuthorActorTypeAgent || profile.PrincipalID != "agt_seed" || profile.MemberID != "mem_agent" || profile.DisplayName != "Seed Agent" {
		t.Fatalf("profile = %#v, want seed agent principal profile", profile)
	}

	actor := taskActorCompatFromPrincipalProfile(profile, &TaskActor{Type: "human", ID: "legacy", Name: "Legacy"})
	if actor == nil || actor.Type != "agent" || actor.ID != "agt_seed" || actor.Name != "Seed Agent" {
		t.Fatalf("actor = %#v, want compatibility actor derived from canonical profile", actor)
	}

	legacyType, legacyID, legacyName := taskLegacyCreatedByFromPrincipalProfile(profile, "user", "legacy", "Legacy")
	if legacyType != "agent" || legacyID != "agt_seed" || legacyName != "Seed Agent" {
		t.Fatalf("legacy fields = (%q, %q, %q), want canonical-derived values", legacyType, legacyID, legacyName)
	}
}
