"""Tests for assignee @mention on Agent Nova Jira comments."""

from __future__ import annotations

import pytest

from packages.integrations.jira import (
    JiraIssue,
    comment_adf_with_assignee_mention,
    prepend_assignee_mention_text,
    reset_mock_jira,
)


def test_comment_adf_prepends_mention_when_assignee_present():
    doc = comment_adf_with_assignee_mention(
        "## Hello\n\nBody text",
        account_id="acc-123",
        display_name="Jane Doe",
    )
    first = doc["content"][0]
    assert first["type"] == "paragraph"
    mention = first["content"][0]
    assert mention["type"] == "mention"
    assert mention["attrs"]["id"] == "acc-123"
    assert mention["attrs"]["text"] == "@Jane Doe"
    assert any(n.get("type") == "heading" for n in doc["content"])


def test_comment_adf_skips_mention_when_unassigned():
    doc = comment_adf_with_assignee_mention("Just a note", account_id="", display_name="")
    assert doc["content"][0]["type"] == "paragraph"
    assert doc["content"][0]["content"][0]["type"] == "text"


def test_prepend_assignee_mention_text():
    assert prepend_assignee_mention_text("hi", account_id="") == "hi"
    assert prepend_assignee_mention_text("hi", account_id="a1", display_name="Pat") == "@Pat\n\nhi"


@pytest.mark.asyncio
async def test_mock_add_comment_mentions_assignee():
    client = reset_mock_jira()
    client.seed(
        JiraIssue(
            key="AN-99",
            summary="Test",
            description="Desc",
            status="To Do",
            issue_type="Story",
            assignee_account_id="acc-99",
            assignee_display_name="Alex Agent",
        )
    )
    await client.add_comment("AN-99", "## Agent Nova needs clarification")
    posted = client.comments_posted[-1]
    assert posted["body"].startswith("@Alex Agent\n\n")
    assert posted["mentioned_account_id"] == "acc-99"
    assert "## Agent Nova needs clarification" in posted["body"]


@pytest.mark.asyncio
async def test_mock_add_comment_no_mention_when_unassigned():
    client = reset_mock_jira()
    client.seed(
        JiraIssue(
            key="AN-100",
            summary="Test",
            description="Desc",
            status="To Do",
            issue_type="Story",
        )
    )
    await client.add_comment("AN-100", "No assignee here")
    posted = client.comments_posted[-1]
    assert posted["body"] == "No assignee here"
    assert posted["mentioned_account_id"] == ""
