;; SatGuard Token Minting - rewards contributors
(define-constant err-owner (err u410))
(define-constant err-nf (err u411))
(define-constant err-dup (err u412))
(define-data-var admin principal tx-sender)
(define-data-var mint-rate uint u10) ;; tokens per unit contributed
(define-map minted {who: principal,pid: uint} {amt: uint,ma: uint})
(define-read-only (get-mint-rate) (var-get mint-rate))
(define-read-only (get-minted (who principal) (pid uint)) (map-get? minted {who: who,pid: pid}))
(define-public (set-mint-rate (rate uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(var-set mint-rate rate)
(print {e: "mint-rate-set",rate: rate})
(ok true)))
(define-public (mint-reward (pid uint))
(let ((contrib (unwrap! (contract-call? .insurance-pool get-contrib pid tx-sender) err-nf))
(ex (map-get? minted {who: tx-sender,pid: pid}))
(ca (get a contrib))
(reward (* ca (var-get mint-rate))))
(asserts! (is-none ex) err-dup)
(asserts! (> ca u0) err-nf)
(try! (contract-call? .sg-token-core mint reward tx-sender))
(map-set minted {who: tx-sender,pid: pid} {amt: reward,ma: block-height})
(print {e: "reward-minted",who: tx-sender,pid: pid,amt: reward})
(ok reward)))