from django.urls import path

from apps.smehub.marketplace import views

app_name = "smehub_marketplace"

urlpatterns = [
    # Hub landing — re-homes Catalogue / Demand / Sales / Responses (Slice B.2).
    path("hub/", views.MarketplaceHubView.as_view(), name="hub"),
    # Product catalogue (public)
    path("", views.ProductCatalogueView.as_view(), name="product_catalogue"),
    path("products/<int:pk>/", views.ProductDetailView.as_view(), name="product_detail"),
    path(
        "products/<int:pk>/express-interest/",
        views.product_express_interest_view,
        name="product_express_interest",
    ),

    # Entrepreneur — manage own listings
    path("my/products/", views.MyProductsView.as_view(), name="my_products"),
    path("my/products/new/", views.ProductCreateView.as_view(), name="product_create"),
    path("my/products/<int:pk>/edit/", views.ProductUpdateView.as_view(), name="product_update"),
    path("my/products/<int:pk>/publish/", views.product_publish_view, name="product_publish"),
    path("my/products/<int:pk>/unpublish/", views.product_unpublish_view, name="product_unpublish"),

    # Buyer registry (public + buyer-managed)
    path("buyers/", views.BuyerRegistryView.as_view(), name="buyer_registry"),
    path("buyers/<int:pk>/", views.BuyerDetailView.as_view(), name="buyer_detail"),
    path("my/buyer-profile/", views.BuyerRegistryFormView.as_view(), name="buyer_profile_form"),

    # Buyer workspace
    path("register-as-buyer/", views.BuyerSelfRegisterView.as_view(), name="buyer_self_register"),
    path("my/buyer-dashboard/", views.BuyerDashboardView.as_view(), name="buyer_dashboard"),
    path("my/responses-inbox/", views.BuyerResponsesInboxView.as_view(), name="buyer_responses_inbox"),

    # Buyer admin verification
    path("admin/buyers/", views.AdminBuyerListView.as_view(), name="admin_buyer_list"),
    path("admin/buyers/<int:pk>/verify/", views.buyer_verify_view, name="buyer_verify"),
    path("admin/buyers/<int:pk>/reject/", views.buyer_reject_view, name="buyer_reject"),
    path("admin/buyers/<int:pk>/deactivate/", views.buyer_deactivate_view, name="buyer_deactivate"),
    path("admin/buyers/<int:pk>/reactivate/", views.buyer_reactivate_view, name="buyer_reactivate"),

    # Market demand
    path("demand/", views.MarketDemandListView.as_view(), name="demand_list"),
    path("demand/<int:pk>/", views.MarketDemandDetailView.as_view(), name="demand_detail"),
    path("my/demand/", views.MyDemandListingsView.as_view(), name="my_demand_listings"),
    path("my/demand/new/", views.MarketDemandCreateView.as_view(), name="demand_create"),
    path("my/demand/<int:pk>/close/", views.demand_close_view, name="demand_close"),
    path("my/demand/<int:pk>/responses/", views.DemandResponsesView.as_view(), name="demand_responses"),
    path("demand/<int:pk>/respond/", views.DemandResponseCreateView.as_view(), name="demand_respond"),
    path("responses/<int:pk>/decide/", views.DemandResponseDecideView.as_view(), name="demand_response_decide"),
    path("my/responses/", views.MyDemandResponsesView.as_view(), name="my_demand_responses"),

    # Market validation (Phase 6.3)
    path(
        "my/products/<int:pk>/validations/",
        views.MarketValidationListView.as_view(),
        name="market_validation_list",
    ),
    path(
        "my/products/<int:pk>/validations/new/",
        views.MarketValidationCreateView.as_view(),
        name="market_validation_create",
    ),
    path(
        "my/products/<int:pk>/validations/<int:vid>/",
        views.MarketValidationDetailView.as_view(),
        name="market_validation_detail",
    ),

    # Sales records (Phase 6.3)
    path("my/sales/", views.SalesRecordListView.as_view(), name="sale_list"),
    path("my/sales/new/", views.SalesRecordCreateView.as_view(), name="sale_create"),
    path("my/sales/<int:pk>/", views.SalesRecordDetailView.as_view(), name="sale_detail"),
    path("my/sales/<int:pk>/edit/", views.SalesRecordUpdateView.as_view(), name="sale_update"),
    path("my/sales/<int:pk>/cancel/", views.sale_cancel_view, name="sale_cancel"),
    path("admin/sales/<int:pk>/verify/", views.sale_verify_view, name="sale_verify"),
    path("sales/<int:pk>/dispute/", views.sale_dispute_view, name="sale_dispute"),
]
