;; janazah-service -- funeral/janazah service coordination
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var service-count uint u0)
(define-map services uint { coordinator: principal, location: (string-utf8 100), capacity: uint, volunteers: uint, active: bool })
(define-map service-volunteers { service-id: uint, volunteer: principal } bool)
(define-public (register-service (location (string-utf8 100)) (capacity uint))
(let ((id (+ (var-get service-count) u1)))
(var-set service-count id)
(map-set services id { coordinator: tx-sender, location: location, capacity: capacity, volunteers: u0, active: true })
(ok id)))
(define-public (join-service (service-id uint))
(let ((s (unwrap! (map-get? services service-id) ERR-NONE)))
(map-set service-volunteers { service-id: service-id, volunteer: tx-sender } true)
(map-set services service-id (merge s { volunteers: (+ (get volunteers s) u1) }))
(ok true)))
(define-public (deactivate-service (service-id uint))
(let ((s (unwrap! (map-get? services service-id) ERR-NONE)))
(asserts! (is-eq tx-sender (get coordinator s)) ERR-AUTH)
(map-set services service-id (merge s { active: false })) (ok true)))
(define-read-only (get-service (id uint)) (map-get? services id))
(define-read-only (get-service-count) (var-get service-count))