;; mahr-escrow -- marriage mahr (dowry) escrow service
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var escrow-count uint u0)
(define-map escrows uint { groom: principal, bride: principal, amount: uint, description: (string-utf8 200), status: (string-ascii 20), block: uint })
(define-public (create-escrow (bride principal) (amount uint) (description (string-utf8 200)))
(let ((id (+ (var-get escrow-count) u1)))
(var-set escrow-count id)
(map-set escrows id { groom: tx-sender, bride: bride, amount: amount, description: description, status: "pending", block: stacks-block-height })
(ok id)))
(define-public (confirm-receipt (id uint))
(let ((e (unwrap! (map-get? escrows id) ERR-NONE)))
(asserts! (is-eq tx-sender (get bride e)) ERR-AUTH)
(map-set escrows id (merge e { status: "confirmed" })) (ok true)))
(define-public (cancel-escrow (id uint))
(let ((e (unwrap! (map-get? escrows id) ERR-NONE)))
(asserts! (is-eq tx-sender (get groom e)) ERR-AUTH)
(map-set escrows id (merge e { status: "cancelled" })) (ok true)))
(define-read-only (get-escrow (id uint)) (map-get? escrows id))
(define-read-only (get-escrow-count) (var-get escrow-count))