from scripts.verify_g2b_executable_canary import (
    build_canary_fixtures,
    discovery_result_from_state,
    authoritative_composition_ids,
    SUCCESSFUL_RUN_STATUSES,
    TERMINAL_RUN_STATUSES,
)


def test_canary_fixtures_ignore_project_history():
    fixtures = build_canary_fixtures()

    assert list(fixtures) == [
        "canary_1_content_portfolio",
        "canary_2_crm_admin",
        "canary_3_booking_or_workflow",
    ]
    assert "portfolio" in fixtures["canary_1_content_portfolio"].prompt.lower()
    assert "crm" in fixtures["canary_2_crm_admin"].prompt.lower()
    assert "booking" in fixtures["canary_3_booking_or_workflow"].prompt.lower()


def test_canary_accepts_successful_extended_codegen_statuses():
    assert {"completed", "completed_with_limitations", "completed_with_l3"} <= (
        TERMINAL_RUN_STATUSES
    )


def test_canary_uses_persisted_core_composition_for_remote_actions():
    class Run:
        plan = {
            "generation_plan": {
                "composition": {
                    "app_block_ids": ["auth.sign_in", "crm.customer"],
                    "feature_pack_ids": ["customer-records"],
                }
            }
        }

    blocks, packs = authoritative_composition_ids(Run())
    assert blocks == {"auth.sign_in", "crm.customer"}
    assert packs == {"customer-records"}
    assert {"completed", "completed_with_limitations", "completed_with_l3"} <= (
        SUCCESSFUL_RUN_STATUSES
    )


def test_discovery_result_from_state_normalizes_wrapped_compiled_brief():
    result = discovery_result_from_state(
        {
            "status": "completed",
            "version": 4,
            "initial_prompt": "Internal CRM canary",
            "approved_by": "00000000-0000-0000-0000-000000000001",
            "result": {
                "decision": "ready",
                "message": "Ready",
                "project_type": "react_app",
                "spec": {"product": {"purpose": "Track CRM records"}},
                "product_name": "Internal CRM",
                "summary": "A small CRM canary.",
                "specification": "Staff manage customer records.",
                "build_plan": {"workflows": []},
                "cloud_contract": {"contract_version": "3"},
                "cloud_contract_sha256": "abc",
            },
        }
    )

    assert result.product_name == "Internal CRM"
    assert result.project_type == "react_app"


def test_discovery_result_from_state_ignores_empty_result_envelope():
    result = discovery_result_from_state(
        {
            "status": "completed",
            "result": {},
            "decision": "ready",
            "message": "Ready",
            "project_type": "html",
            "spec": {"product": {"purpose": "Portfolio"}},
            "product_name": "Internal Portfolio",
            "summary": "A portfolio canary.",
            "specification": "Static portfolio content.",
        }
    )

    assert result.product_name == "Internal Portfolio"
    assert result.project_type == "html"
