"""7A Forms audit: product-domain inventory; no frozen form.* verbs."""
from __future__ import annotations

from src.domain.app_blocks.catalogs import FEATURE_PACK_ALIASES
from src.domain.connectors.catalog import CONNECTORS, slugs_implementing
from src.domain.connectors.invoke_capabilities import (
    CAPABILITY_CONVERSION_PATTERN,
    FORMS_DOMAIN_AUDIT,
    FORMS_FAMILY_PLAN,
    FORMS_HYPOTHESIZED_VERBS_NOT_FROZEN,
    FORMS_OBJECT_VOCABULARY_CANDIDATES,
    INVOKE_CAPABILITIES,
)
from src.domain.connectors.public_gateway import (
    PHASE_6_STATUS,
    PHASE_7_STATUS,
    PUBLIC_INVOCABLE_CAPABILITIES,
)
from src.domain.feature_packs.catalog_v2 import CATALOG_OVERLAYS
from src.domain.starter_library.catalog import known_contract_ids


def test_forms_7a_complete_without_frozen_verbs() -> None:
    pattern = CAPABILITY_CONVERSION_PATTERN
    assert PHASE_6_STATUS == "6p_complete"
    assert PHASE_7_STATUS == "complete"
    assert pattern["phase_6_status"] == "6p_complete"
    assert pattern["phase_7_status"] == "complete"
    assert pattern["current_program_phase"] == 8
    assert pattern["next_program_slice"] == "9_app_block_modernization"
    assert pattern["opened_families"]["forms.*"] == "composition_integration"
    assert pattern["closed_families"]["crm.*"] == "complete"
    assert pattern["closed_families"]["forms.*"] == "complete"
    assert pattern["next_candidate_classification"]["forms.*"] == (
        "split_p2hs_form_product_and_customer_post_submit"
    )
    assert pattern["parked_families"] == {}
    assert pattern["program_order"][pattern["program_order"].index("crm") + 1] == "forms"
    plan = FORMS_FAMILY_PLAN
    assert plan["product_domain"] is True
    assert plan["not_a_connector"] is True
    assert plan["verbs_frozen"] is False
    assert plan["object_model_frozen"] is True
    assert plan["validation_semantics_frozen"] is True
    assert plan["runtime_acceptance_frozen"] is True
    assert plan["persistence_contract_frozen"] is True
    assert plan["file_runtime_frozen"] is True
    assert plan["anti_abuse_frozen"] is True
    assert plan["post_submit_frozen"] is True
    assert plan["crm_composition_frozen"] is True
    assert plan["email_composition_frozen"] is True
    assert plan["automation_webhook_composition_frozen"] is True
    assert plan["conditional_logic_frozen"] is True
    assert plan["multi_step_frozen"] is True
    assert plan["public_runtime_frozen"] is True
    assert plan["codegen_exposure_frozen"] is True
    assert plan["composition_integration_frozen"] is True
    assert plan["e2e_frozen"] is True
    assert plan["status"] == "complete"
    assert plan["forms_contact_is_generic_domain"] is False
    assert plan["forms_contact_role"] == "contact_form_app_block"
    assert plan["slices"][0] == "7a_forms_domain_audit"
    assert plan["slices"][1] == "7b_canonical_form_model"
    assert plan["slices"][2] == "7c_form_validation_semantics"
    assert plan["slices"][3] == "7d_submission_runtime"
    assert plan["slices"][4] == "7e_persistence_and_retrieval"
    assert plan["slices"][5] == "7f_file_uploads"
    assert plan["slices"][6] == "7g_anti_abuse"
    assert plan["slices"][7] == "7h_post_submit_action_model"
    assert plan["slices"][8] == "7i_crm_composition"
    assert plan["next_slice"] == "9_app_block_modernization"
    assert FORMS_DOMAIN_AUDIT["recommended_next_slice"] == "7b_canonical_form_model"
    assert FORMS_DOMAIN_AUDIT["forms_contact_classification"] == (
        "A_specific_contact_form_app_block"
    )


def test_hypothesized_form_verbs_are_not_capabilities() -> None:
    assert FORMS_OBJECT_VOCABULARY_CANDIDATES == (
        "FormDefinition",
        "FormField",
        "FormValidationRule",
        "FormSubmission",
        "FormAction",
        "FormStep",
        "FormCondition",
        "FormFileField",
        "FormSpamPolicy",
    )
    for verb in FORMS_HYPOTHESIZED_VERBS_NOT_FROZEN:
        assert verb not in INVOKE_CAPABILITIES
        assert verb not in PUBLIC_INVOCABLE_CAPABILITIES
        assert slugs_implementing(verb) == ()
    assert FORMS_DOMAIN_AUDIT["new_capability_verbs"] == ()
    assert FORMS_DOMAIN_AUDIT["catalog_mutated"] is False
    assert FORMS_DOMAIN_AUDIT["implements_attached"] is False
    assert FORMS_DOMAIN_AUDIT["codegen_truth_flip"] is False
    assert FORMS_DOMAIN_AUDIT["schema_migrations"] is False
    assert FORMS_DOMAIN_AUDIT["public_bff_form_capabilities"] == ()


def test_forms_contact_is_not_generic_pack_and_quote_aliases_contact_capture() -> None:
    assert FEATURE_PACK_ALIASES["forms.public_submission"] == "contact-capture"
    assert "contact-capture" in CATALOG_OVERLAYS
    provide_ids = {cap.id for cap in CATALOG_OVERLAYS["contact-capture"]["provides"]}
    assert "form.public_submission" in provide_ids
    assert FORMS_DOMAIN_AUDIT["forms_public_submission_alias"] == "contact-capture"
    assert "form.standard" in known_contract_ids()
    assert FORMS_DOMAIN_AUDIT["generated_contact_entity"] == "contact_submission"


def test_no_provider_form_catalogs() -> None:
    assert FORMS_DOMAIN_AUDIT["hubspot_form_catalog_actions"] == ()
    assert FORMS_DOMAIN_AUDIT["salesforce_form_catalog_actions"] == ()
    hubspot = {action.slug for action in CONNECTORS["hubspot"].actions}
    salesforce = {action.slug for action in CONNECTORS["salesforce"].actions}
    assert not any("form" in slug for slug in hubspot)
    assert not any("form" in slug for slug in salesforce)
    assert "form.submit" not in INVOKE_CAPABILITIES
    assert "form.public_create" not in INVOKE_CAPABILITIES
    assert "form.public_submission" not in INVOKE_CAPABILITIES
