;; Wave effect - sine wave displacement distortion
(require-primitives "geometry" "image")

(define-effect wave
  :params (
    (amplitude :type int :default 10 :range [0 100])
    (wavelength :type int :default 50 :range [10 500])
    (speed :type int :default 1 :range [0 10])
    (direction :type string :default "horizontal")
  )
  (let* ((w (image:width frame))
         (h (image:height frame))
         ;; Use _time for animation phase
         (phase (* (or _time 0) speed 2 pi))
         ;; Calculate frequency: waves per dimension
         (freq (/ (if (= direction "vertical") w h) wavelength))
         (axis (cond
                 ((= direction "horizontal") "x")
                 ((= direction "vertical") "y")
                 (else "both")))
         (coords (geometry:wave-coords w h axis freq amplitude phase)))
    (geometry:remap frame (geometry:coords-x coords) (geometry:coords-y coords))))
