"""Phase 2F — document.* runtime truth snapshot. Codegen default is 2G."""
from __future__ import annotations

from src.domain.connectors.catalog import get_action
from src.domain.connectors.invoke_capabilities import (
    DOCUMENT_FAMILY_PHASE_2F,
    GOOGLE_DOCS_PROVIDER_ACTIONS,
)
from src.domain.connectors.public_gateway import PHASE_2F_STATUS, PHASE_2G_STATUS

_EXPECTED_IMPLEMENTER = {
    "document.create": "google_docs.create_document",
    "document.get": "google_docs.get_document",
    "document.insert_text": "google_docs.insert_text",
    "document.append_text": "google_docs.append_text",
    "document.replace_text": "google_docs.replace_all_text",
}


def test_phase_2f_flips_runtime_truth_without_codegen() -> None:
    assert PHASE_2F_STATUS == "complete"
    assert PHASE_2G_STATUS == "complete"
    phase = DOCUMENT_FAMILY_PHASE_2F
    assert phase["catalog_invocable"] is True
    assert phase["implements_attached"] is True
    assert phase["implemented_by"] == "slugs_implementing"
    assert phase["codegen_default"] is False
    assert phase["catalog_method_unset"] is True
    assert phase["status_remains_contract"] is True
    assert phase["public_bff_capability_route"] is True
    assert phase["core_private_invoke_http"] is True
    assert phase["enqueue"] == "integration.execute"
    assert phase["document_ref_emitted"] is False
    assert phase["create_does_not_persist_binding"] is True
    assert phase["no_export"] is True
    assert phase["no_spreadsheet"] is True
    assert phase["p2hs_owned_google_path"] is False
    assert phase["next_slice"] == "2g_document_codegen_defaults"


def test_google_docs_actions_are_the_only_document_implementations() -> None:
    for slug, verb in (
        ("google_docs.create_document", "document.create"),
        ("google_docs.get_document", "document.get"),
        ("google_docs.insert_text", "document.insert_text"),
        ("google_docs.append_text", "document.append_text"),
        ("google_docs.replace_all_text", "document.replace_text"),
    ):
        pair = get_action(slug)
        assert pair is not None
        assert pair[1].implements == (verb,)
    for slug in GOOGLE_DOCS_PROVIDER_ACTIONS:
        pair = get_action(slug)
        assert pair is not None
        assert pair[1].implements != ()
    assert set(GOOGLE_DOCS_PROVIDER_ACTIONS) == set(_EXPECTED_IMPLEMENTER.values())
