;; olive-grove -- olive tree adoption program
(define-data-var tree-count uint u0)
(define-map trees uint { adopter: principal, grove: (string-ascii 20), age: uint, yield-kg: uint })
(define-public (adopt-tree (grove (string-ascii 20)) (age uint))
(let ((id (+ (var-get tree-count) u1)))
(var-set tree-count id)
(map-set trees id { adopter: tx-sender, grove: grove, age: age, yield-kg: u0 }) (ok id)))
(define-public (log-yield (id uint) (kg uint))
(let ((t (unwrap! (map-get? trees id) (err u404))))
(map-set trees id (merge t { yield-kg: (+ (get yield-kg t) kg) })) (ok kg)))
(define-read-only (get-tree (id uint)) (map-get? trees id))
(define-read-only (get-count) (var-get tree-count))