;; SatGuard Event Oracle - real-world insurance events
(define-constant err-unauth (err u630))
(define-constant err-nf (err u631))
(define-constant err-dup (err u632))
(define-constant EV-REP u1)
(define-constant EV-VER u2)
(define-constant EV-REJ u3)
(define-data-var e-nonce uint u0)
(define-map events {id: uint} {t: (string-ascii 50),d: (string-utf8 200),by: principal,st: uint,ra: uint})
(define-read-only (get-event (id uint)) (map-get? events {id: id}))
(define-read-only (get-event-count) (var-get e-nonce))
(define-public (report-event (t (string-ascii 50)) (d (string-utf8 200)))
(let ((nid (+ (var-get e-nonce) u1)))
(asserts! (contract-call? .sg-oracle-registry is-oracle tx-sender) err-unauth)
(map-set events {id: nid} {t: t,d: d,by: tx-sender,st: EV-REP,ra: block-height})
(var-set e-nonce nid)
(print {e: "event-reported",id: nid,t: t})
(ok nid)))
(define-public (verify-event (id uint))
(let ((ev (unwrap! (map-get? events {id: id}) err-nf)))
(asserts! (contract-call? .sg-oracle-registry is-oracle tx-sender) err-unauth)
(asserts! (is-eq (get st ev) EV-REP) err-dup)
(map-set events {id: id} (merge ev {st: EV-VER}))
(print {e: "event-verified",id: id})
(ok true)))
(define-public (reject-event (id uint))
(let ((ev (unwrap! (map-get? events {id: id}) err-nf)))
(asserts! (contract-call? .sg-oracle-registry is-oracle tx-sender) err-unauth)
(asserts! (is-eq (get st ev) EV-REP) err-dup)
(map-set events {id: id} (merge ev {st: EV-REJ}))
(print {e: "event-rejected",id: id})
(ok true)))