from __future__ import annotations

from agent_framework.runtime.agent_runtime import AgentRuntimeMixin


def test_framework_detecta_instrucao_de_composicao_llm_recursiva():
    results=[{"ok":True,"result":{"output":{"orientar":{"requires_llm_composition":True,"response_instruction":"Explique a devolução."}}}}]
    required, instructions = AgentRuntimeMixin._mcp_llm_composition_directive(results)
    assert required is True
    assert instructions == ["Explique a devolução."]


def test_direct_answer_eh_desabilitada_quando_tool_exige_composicao_llm():
    runtime=AgentRuntimeMixin()
    results=[{"ok":True,"tool_name":"pro_rata","result":{"requires_llm_composition":True,"response_instruction":"Explique."}}]
    assert runtime.build_direct_mcp_answer({"user_text":"explique"}, results, agent_label="Contas") is None


def test_pro_rata_orientacao_declara_composicao_no_llm_do_framework():
    from app.domain.contas.workflow_actions import build_contas_workflow_actions

    class Service: pass
    reg=build_contas_workflow_actions(Service())  # type: ignore[arg-type]
    result=reg.get("orientar_pagamento_pro_rata")(
        {"devolucao":{"format_text":"conta_futura","items":[{"itemName":"Plano","validatedAmount":3.06}]}},
        {"input":{}},
    )
    assert result["requires_llm_composition"] is True
    assert result["devolucao"]["format_text"] == "conta_futura"
    assert "devolução" in result["response_instruction"]
