"""Confluence already-implemented validation helpers."""

from __future__ import annotations

from dataclasses import dataclass, field
from typing import List, Optional

from packages.integrations.jira import JiraIssue
from packages.knowledge.retrievers import KnowledgeHit


@dataclass
class DocReference:
    title: str
    url: str = ""
    snippet: str = ""


@dataclass
class DocCheckResult:
    already_implemented: bool
    rationale: str = ""
    confidence: float = 0.0
    references: List[DocReference] = field(default_factory=list)


def doc_review_comment_body(refs: List[DocReference], rationale: str = "") -> str:
    lines = [
        "## Agent Nova: functionality may already exist in Confluence",
        "",
        "Project documentation suggests this request may already be implemented "
        "or fully documented.",
    ]
    if rationale.strip():
        lines.extend(["", f"Reason: {rationale.strip()}"])
    lines.extend(["", "References:"])
    if refs:
        for i, ref in enumerate(refs, start=1):
            link = f" — {ref.url}" if ref.url else ""
            lines.append(f"{i}. {ref.title}{link}")
    else:
        lines.append("- (see Confluence search results)")
    lines.extend(
        [
            "",
            "Next step: reply with `continue` to proceed anyway, or `already done` / "
            "`close` to stop this run.",
        ]
    )
    return "\n".join(lines)


def build_doc_check_prompt(issue: JiraIssue, hits: List[KnowledgeHit]) -> str:
    lines = [
        "Decide whether the NEW Jira ticket requests functionality that is ALREADY "
        "IMPLEMENTED or fully documented in the Confluence hits.",
        "Mark already_implemented=true only when a hit clearly describes the same "
        "Salesforce feature (same object/field/behavior) as already built or delivered.",
        "Do NOT mark true for generic standards, naming conventions, or loosely related docs.",
        "If true, list the matching reference titles (and URLs when present).",
        "",
        "NEW ticket:",
        f"Key: {issue.key}",
        f"Summary: {issue.summary}",
        f"Description: {(issue.description or '')[:2000]}",
        "",
        "CONFLUENCE HITS:",
    ]
    if not hits:
        lines.append("(none)")
    for h in hits:
        lines.extend(
            [
                f"- Title: {h.title}",
                f"  URL: {h.url or '(none)'}",
                f"  Snippet: {(h.snippet or '')[:600]}",
            ]
        )
    return "\n".join(lines)
