;; SatGuard Policy Terms
(define-constant err-owner (err u710))
(define-constant err-nf (err u711))
(define-constant err-dup (err u712))
(define-data-var admin principal tx-sender)
(define-data-var t-nonce uint u0)
(define-map terms {id: uint} {pid: uint,text: (string-utf8 500),ver: uint,ca: uint})
(define-map accepted {pol-id: uint,who: principal} {terms-id: uint,aa: uint})
(define-read-only (get-terms (id uint)) (map-get? terms {id: id}))
(define-read-only (get-acceptance (pol-id uint) (who principal)) (map-get? accepted {pol-id: pol-id,who: who}))
(define-public (set-terms (pid uint) (text (string-utf8 500)))
(let ((nid (+ (var-get t-nonce) u1)))
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(map-set terms {id: nid} {pid: pid,text: text,ver: nid,ca: block-height})
(var-set t-nonce nid)
(print {e: "terms-set",id: nid,pid: pid})
(ok nid)))
(define-public (accept-terms (pol-id uint) (terms-id uint))
(let ((t (unwrap! (map-get? terms {id: terms-id}) err-nf))
(ex (map-get? accepted {pol-id: pol-id,who: tx-sender})))
(asserts! (is-none ex) err-dup)
(map-set accepted {pol-id: pol-id,who: tx-sender} {terms-id: terms-id,aa: block-height})
(print {e: "terms-accepted",pol-id: pol-id,who: tx-sender})
(ok true)))