;; SatGuard Coverage Types Registry
(define-constant err-owner (err u720))
(define-constant err-dup (err u721))
(define-constant err-nf (err u722))
(define-data-var admin principal tx-sender)
(define-data-var ct-nonce uint u0)
(define-map cov-types {id: uint} {name: (string-ascii 50),desc: (string-utf8 200),active: bool,ca: uint})
(define-map name-to-id {name: (string-ascii 50)} {id: uint})
(define-read-only (get-type (id uint)) (map-get? cov-types {id: id}))
(define-read-only (get-type-by-name (name (string-ascii 50))) (map-get? name-to-id {name: name}))
(define-read-only (get-type-count) (var-get ct-nonce))
(define-public (add-type (name (string-ascii 50)) (desc (string-utf8 200)))
(let ((nid (+ (var-get ct-nonce) u1)))
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (is-none (map-get? name-to-id {name: name})) err-dup)
(map-set cov-types {id: nid} {name: name,desc: desc,active: true,ca: block-height})
(map-set name-to-id {name: name} {id: nid})
(var-set ct-nonce nid)
(print {e: "cov-type-added",id: nid,name: name})
(ok nid)))
(define-public (deactivate-type (id uint))
(let ((ct (unwrap! (map-get? cov-types {id: id}) err-nf)))
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(map-set cov-types {id: id} (merge ct {active: false}))
(print {e: "cov-type-deactivated",id: id})
(ok true)))