#lang debug racket
(require pitfall
         quad/position
         quad/quad
         "attrs.rkt")
(provide (all-defined-out))

(define-for-syntax debug-mode #false)

(define-syntax (go stx)
  (datum->syntax stx
                 (cond
                   [debug-mode
                    '(begin
                       (define draw-debug? (make-parameter #true))
                       (define draw-debug-line? (make-parameter #true))
                       (define draw-debug-block? (make-parameter #false))
                       (define draw-debug-string? (make-parameter #true))
                       (define draw-debug-image? (make-parameter #false))
                       (define draw-debug-draw? (make-parameter #false))

                       (define debug-page-width (make-parameter 400))
                       (define debug-page-height (make-parameter 400))
                       (define debug-x-margin (make-parameter 50))
                       (define debug-y-margin (make-parameter 50))
                       (define debug-column-count (make-parameter 1))
                       (define debug-column-gap (make-parameter 36)))]
                   [else
                    '(begin
                       (define draw-debug? (make-parameter #false))
                       (define draw-debug-line? (make-parameter #true))
                       (define draw-debug-block? (make-parameter #true))
                       (define draw-debug-string? (make-parameter #true))
                       (define draw-debug-image? (make-parameter #true))
                       (define draw-debug-draw? (make-parameter #true))

                       (define debug-page-width (make-parameter #f))
                       (define debug-page-height (make-parameter #f))
                       (define debug-x-margin (make-parameter #f))
                       (define debug-y-margin (make-parameter #f))
                       (define debug-column-count (make-parameter #f))
                       (define debug-column-gap (make-parameter #f)))])))


(go)


(define (draw-debug q doc [fill-color "#f99"] [stroke-color "#fcc"] . _)
  (define stroke-width 0.5)
  (when (or (draw-debug?) (quad-ref q :draw-debug))
    (save doc)
    ;; draw layout box
    (line-width doc stroke-width)
    ; subtracting stroke-width keeps adjacent boxes from overlapping
    (save doc)
    (apply rect doc (append (pt+ (quad-origin q)) (map (λ (x) (- x stroke-width)) (size q))))
    (clip doc)
    (define pt (to-point q))
    (circle doc (pt-x pt) (pt-y pt) (+ 3 stroke-width))
    (fill doc fill-color)
    (restore doc)
    (apply rect doc (append (pt+ (quad-origin q)) (map (λ (x) (- x stroke-width)) (size q))))
    (stroke doc stroke-color)
    (restore doc)))
