@startuml
title Request Pickup (Fast Path)
actor "Factory Officer" as FO
participant "Public Site (FE)" as Web
participant "Backend (Django)" as API
actor "Staff (Web Admin)" as Staff
actor Driver
participant "Weigh Station" as Scale
participant Billing

FO -> Web: Open "Sell Scrap" (Request Pickup)
Web --> FO: Show form (materials, qty, photos, address, time)
FO -> Web: Submit form (+photos)
Web -> API: POST /pickup-request
API -> API: Create Lead (org, details)
API --> Staff: Notify (inbox/email)
Staff -> API: Create/attach Customer + Site
Staff -> API: Create PickupOrder (status=requested)
Staff -> API: Schedule + Assign Driver
API --> FO: Confirmation (schedule)
Driver -> FO: Arrive and collect
Driver -> Scale: Weigh materials
Scale -> API: Record WeighTicket + lines
API -> Billing: Generate Invoice or Payout
Billing --> FO: Invoice/Payout issued
FO -> Billing: Pay / Receive funds
API -> API: Mark Pickup completed
@enduml

@startuml
title Get Bids (Marketplace Path)
actor "Factory Officer" as FO
participant "Public Site (FE)" as Web
participant "Backend (Django)" as API
actor "Staff (Web Admin)" as Staff
actor "Recycler(s)" as Rec
actor Driver
participant "Weigh Station" as Scale
participant Billing

FO -> Web: "Sell Scrap" → Get Bids
Web --> FO: Listing form (title, materials, qty, photos, reserve, ends)
FO -> Web: Submit request
Web -> API: POST listing-request
API -> API: Create Draft ScrapListing (or Lead: listing_request)
Staff -> API: Review + Publish (public or invite-only)
API --> Rec: Listing visible / invites sent
Rec -> API: Place Bid(s)
Staff -> API: Close listing at end time
Staff -> API: Award winning bid
API -> API: Create PickupOrder from award
Driver -> FO: Collect materials
Driver -> Scale: Weigh materials
Scale -> API: Record WeighTicket + lines
API -> Billing: Generate Invoice or Payout
Billing --> FO: Invoice/Payout issued
API -> API: Mark Pickup completed
@enduml

