"""Domain signals emitted by the SME-Hub marketplace subprocess (SP3b).

M&EL listens for the milestone signals (FRSME-MEI004 / FRSME-MPL020).
"""
import django.dispatch

# Buyer registry ------------------------------------------------------
smehub_buyer_verified = django.dispatch.Signal()
"""kwargs: buyer (BuyerRegistryEntry), by_user (CustomUser)"""

# Product listings ----------------------------------------------------
smehub_product_published = django.dispatch.Signal()
"""kwargs: listing (ProductListing), by_user (CustomUser)"""

smehub_product_unpublished = django.dispatch.Signal()
"""kwargs: listing (ProductListing), by_user (CustomUser)"""

# Market demand -------------------------------------------------------
smehub_market_demand_posted = django.dispatch.Signal()
"""kwargs: listing (MarketDemandListing)"""

smehub_market_demand_closed = django.dispatch.Signal()
"""kwargs: listing (MarketDemandListing), by_user (CustomUser)"""

smehub_demand_response_submitted = django.dispatch.Signal()
"""kwargs: response (DemandResponse)"""

smehub_demand_response_decided = django.dispatch.Signal()
"""kwargs: response (DemandResponse), by_user (CustomUser), outcome (str)"""

# Market validation & sales (Phase 6.3) -------------------------------
smehub_market_validation_recorded = django.dispatch.Signal()
"""kwargs: validation (MarketValidation), by_user (CustomUser)"""

smehub_sale_stub_created = django.dispatch.Signal()
"""kwargs: sale (SalesRecord), response (DemandResponse)"""

smehub_sale_recorded = django.dispatch.Signal()
"""kwargs: sale (SalesRecord), by_user (CustomUser)"""

smehub_sale_updated = django.dispatch.Signal()
"""kwargs: sale (SalesRecord), by_user (CustomUser), changed_fields (list[str])"""

smehub_sale_verified = django.dispatch.Signal()
"""kwargs: sale (SalesRecord), by_user (CustomUser)"""

smehub_sale_disputed = django.dispatch.Signal()
"""kwargs: sale (SalesRecord), by_user (CustomUser), reason (str)"""

smehub_sale_cancelled = django.dispatch.Signal()
"""kwargs: sale (SalesRecord), by_user (CustomUser), reason (str)"""
