;; SatGuard Fee Engine
(define-constant err-owner (err u810))
(define-constant err-amt (err u811))
(define-data-var admin principal tx-sender)
(define-data-var flat-fee uint u1000) ;; flat fee in micro-units
(define-data-var pct-fee uint u250) ;; 2.5% in basis points
(define-read-only (get-flat-fee) (var-get flat-fee))
(define-read-only (get-pct-fee) (var-get pct-fee))
(define-public (set-flat-fee (fee uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(var-set flat-fee fee)
(print {e: "flat-fee-set",fee: fee})
(ok true)))
(define-public (set-pct-fee (fee uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (<= fee u1000) err-amt) ;; max 10%
(var-set pct-fee fee)
(print {e: "pct-fee-set",fee: fee})
(ok true)))
(define-read-only (calc-fee (amt uint))
(let ((pct (/ (* amt (var-get pct-fee)) u10000))
(flat (var-get flat-fee)))
(ok (+ pct flat))))
(define-read-only (calc-amount-after-fee (amt uint))
(let ((fee (/ (* amt (var-get pct-fee)) u10000)))
(ok (- amt (+ fee (var-get flat-fee))))))