;; agate-track-36
(define-map passes { id: principal } { owner: principal, active: bool, timestamp: uint })
(define-data-var total-entries uint u0)
(define-public (register (id principal))
(if (is-none (map-get? passes { id: id }))
(begin
(map-set passes { id: id }
{ owner: tx-sender, active: true, timestamp: block-height })
(var-set total-entries (+ (var-get total-entries) u1))
(ok true))
(err u1)))
(define-public (deactivate (id principal))
(match (map-get? passes { id: id })
entry (if (is-eq (get owner entry) tx-sender)
(begin
(map-set passes { id: id }
(merge entry { active: false }))
(ok true))
(err u2))
(err u3)))
(define-read-only (lookup (id principal))
(ok (map-get? passes { id: id })))
(define-read-only (get-total)
(ok (var-get total-entries)))