;; goat-share -- qurbani goat share registry
(define-data-var share-count uint u0)
(define-map shares uint { organizer: principal, slots: uint, filled: uint, price: uint, year: uint })
(define-map participants { share-id: uint, user: principal } bool)
(define-public (create-share (slots uint) (price uint) (year uint))
(let ((id (+ (var-get share-count) u1)))
(var-set share-count id)
(map-set shares id { organizer: tx-sender, slots: slots, filled: u0, price: price, year: year }) (ok id)))
(define-public (join-share (share-id uint))
(let ((s (unwrap! (map-get? shares share-id) (err u404))))
(asserts! (< (get filled s) (get slots s)) (err u401))
(map-set participants { share-id: share-id, user: tx-sender } true)
(map-set shares share-id (merge s { filled: (+ (get filled s) u1) })) (ok true)))
(define-read-only (get-share (id uint)) (map-get? shares id))