;; Events service — inter-service action endpoints
;;
;; Each defaction replaces a Python handler in bp/actions/routes.py.
;; The (service ...) primitive calls the registered CalendarService method
;; with g.s (async session) + keyword args.

(defaction adjust-ticket-quantity (&key entry-id count user-id session-id ticket-type-id)
  "Add or remove tickets for a calendar entry."
  (do
    (service "calendar" "adjust-ticket-quantity"
      :entry-id entry-id :count count
      :user-id user-id :session-id session-id
      :ticket-type-id ticket-type-id)
    {"ok" true}))

(defaction claim-entries-for-order (&key order-id user-id session-id page-post-id)
  "Claim pending calendar entries for an order."
  (do
    (service "calendar" "claim-entries-for-order"
      :order-id order-id :user-id user-id
      :session-id session-id :page-post-id page-post-id)
    {"ok" true}))

(defaction claim-tickets-for-order (&key order-id user-id session-id page-post-id)
  "Claim pending tickets for an order."
  (do
    (service "calendar" "claim-tickets-for-order"
      :order-id order-id :user-id user-id
      :session-id session-id :page-post-id page-post-id)
    {"ok" true}))

(defaction confirm-entries-for-order (&key order-id user-id session-id)
  "Confirm calendar entries after payment."
  (do
    (service "calendar" "confirm-entries-for-order"
      :order-id order-id :user-id user-id :session-id session-id)
    {"ok" true}))

(defaction confirm-tickets-for-order (&key order-id)
  "Confirm tickets after payment."
  (do
    (service "calendar" "confirm-tickets-for-order" :order-id order-id)
    {"ok" true}))

(defaction toggle-entry-post (&key entry-id content-type content-id)
  "Toggle association between a calendar entry and a content item."
  (let ((is-associated (service "calendar" "toggle-entry-post"
                         :entry-id entry-id
                         :content-type content-type
                         :content-id content-id)))
    {"is_associated" is-associated}))

(defaction adopt-entries-for-user (&key user-id session-id)
  "Transfer anonymous calendar entries to a logged-in user."
  (do
    (service "calendar" "adopt-entries-for-user"
      :user-id user-id :session-id session-id)
    {"ok" true}))

(defaction adopt-tickets-for-user (&key user-id session-id)
  "Transfer anonymous tickets to a logged-in user."
  (do
    (service "calendar" "adopt-tickets-for-user"
      :user-id user-id :session-id session-id)
    {"ok" true}))
