;; fidya-calc -- Fidya (fasting compensation) calculator and payment tracker
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var payment-count uint u0)
(define-data-var total-collected uint u0)
(define-data-var rate-per-day uint u10)
(define-map payments uint { payer: principal, days-missed: uint, amount: uint, year: uint, block: uint })
(define-map payer-history principal uint)
(define-public (pay-fidya (days-missed uint) (year uint))
(let ((id (+ (var-get payment-count) u1))
(amount (* days-missed (var-get rate-per-day)))
(prev (default-to u0 (map-get? payer-history tx-sender))))
(var-set payment-count id)
(var-set total-collected (+ (var-get total-collected) amount))
(map-set payments id { payer: tx-sender, days-missed: days-missed, amount: amount, year: year, block: stacks-block-height })
(map-set payer-history tx-sender (+ prev amount))
(ok id)))
(define-public (update-rate (new-rate uint))
(begin (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
(var-set rate-per-day new-rate) (ok new-rate)))
(define-read-only (get-payment (id uint)) (map-get? payments id))
(define-read-only (get-rate) (var-get rate-per-day))
(define-read-only (get-total-collected) (var-get total-collected))