"""payments.* resolve to a bound Stripe/PayPal connection — not caller payload authority."""
from uuid import uuid4

from src.domain.connectors.payment_resolve import (
    PaymentConnectionSnapshot,
    job_type_for_payment_capability,
    resolve_payment_capability,
)


def _snap(key: str, **overrides) -> PaymentConnectionSnapshot:
    data = dict(
        connection_id=uuid4(),
        connector_key=key,
        status="active",
        has_secrets=True,
    )
    data.update(overrides)
    return PaymentConnectionSnapshot(**data)


def test_job_aliases_map_to_canonical_payments_verbs():
    assert job_type_for_payment_capability("payments.checkout.create") == "payment.checkout.create"
    assert job_type_for_payment_capability("payments.order.capture") == "payment.capture"
    assert job_type_for_payment_capability("payments.refund.create") == "payment.refund"
    assert job_type_for_payment_capability("payments.catalog.upsert") == "payment.catalog.upsert"


def test_unbound_payments_are_denied():
    result = resolve_payment_capability(
        capability="payments.checkout.create",
        snapshots=[],
        enabled_capabilities={"integrations.execute"},
    )
    assert result.ok is False
    assert result.reason_code == "capability_not_bound"


def test_single_stripe_connection_resolves():
    stripe = _snap("stripe")
    result = resolve_payment_capability(
        capability="payments.checkout.create",
        snapshots=[stripe],
        enabled_capabilities={"integrations.execute"},
    )
    assert result.ok is True
    assert result.provider == "stripe"
    assert result.connection_id == stripe.connection_id
    assert result.action == "stripe.create_checkout"


def test_ambiguous_providers_require_binding():
    result = resolve_payment_capability(
        capability="payments.checkout.create",
        snapshots=[_snap("stripe"), _snap("paypal")],
        enabled_capabilities={"integrations.execute"},
    )
    assert result.ok is False
    assert result.reason_code == "binding_ambiguous"


def test_paypal_only_catalog_upsert_is_eligible():
    paypal = _snap("paypal")
    result = resolve_payment_capability(
        capability="payments.catalog.upsert",
        snapshots=[paypal],
        enabled_capabilities={"integrations.execute"},
    )
    assert result.ok is True
    assert result.provider == "paypal"
    assert result.action is None


def test_browser_connection_id_must_be_eligible():
    stripe = _snap("stripe")
    result = resolve_payment_capability(
        capability="payments.checkout.create",
        snapshots=[stripe],
        enabled_capabilities={"integrations.execute"},
        connection_id=uuid4(),
    )
    assert result.ok is False
    assert result.reason_code == "capability_not_bound"
