;; lamp-fund -- mosque lamp and lighting fund
(define-data-var fund uint u0)
(define-data-var lamp-count uint u0)
(define-map lamps uint { mosque: (string-ascii 30), type: (string-ascii 20), cost: uint, funded: bool })
(define-map donors principal uint)
(define-public (donate (amount uint))
(let ((prev (default-to u0 (map-get? donors tx-sender))))
(var-set fund (+ (var-get fund) amount))
(map-set donors tx-sender (+ prev amount)) (ok amount)))
(define-public (request-lamp (mosque (string-ascii 30)) (type (string-ascii 20)) (cost uint))
(let ((id (+ (var-get lamp-count) u1)))
(var-set lamp-count id)
(map-set lamps id { mosque: mosque, type: type, cost: cost, funded: false }) (ok id)))
(define-read-only (get-lamp (id uint)) (map-get? lamps id))
(define-read-only (get-fund) (var-get fund))