;; Food Pantry - Community food pantry
;; Halal - feeding the hungry
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var item-count uint u0)
(define-data-var total-donated uint u0)
(define-map pantry-items uint { name: (string-utf8 100), quantity: uint, category: (string-ascii 20) })
(define-map pantry-donors principal uint)
(define-public (donate (amount uint))
(let ((prev (default-to u0 (map-get? pantry-donors tx-sender))))
(try! (stx-transfer? amount tx-sender CONTRACT-OWNER))
(map-set pantry-donors tx-sender (+ prev amount))
(var-set total-donated (+ (var-get total-donated) amount)) (ok amount)))
(define-public (add-item (name (string-utf8 100)) (quantity uint) (category (string-ascii 20)))
(let ((id (+ (var-get item-count) u1)))
(asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
(map-set pantry-items id { name: name, quantity: quantity, category: category })
(var-set item-count id) (ok id)))
(define-public (distribute (id uint) (qty uint))
(let ((item (unwrap! (map-get? pantry-items id) ERR-NONE)))
(asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
(map-set pantry-items id (merge item { quantity: (- (get quantity item) qty) })) (ok qty)))
(define-read-only (get-item (id uint)) (map-get? pantry-items id))
(define-read-only (get-stats) (ok { items: (var-get item-count), donated: (var-get total-donated) }))