module Diagrams.Puzzles.Draw (
    PuzzleSol,
    RenderPuzzle,
    OutputChoice(..),
    draw
  ) where
import Diagrams.Prelude
type RenderPuzzle b p s = (p -> Diagram b R2, (p, s) -> Diagram b R2)
type PuzzleSol b = (Diagram b R2, Maybe (Diagram b R2))
data OutputChoice = DrawPuzzle | DrawSolution | DrawExample
    deriving Show
draw :: (Backend b R2, Renderable (Path R2) b) =>
        PuzzleSol b -> OutputChoice -> Maybe (Diagram b R2)
draw (p, ms) = fmap (bg white) . d
    where d DrawPuzzle   = Just p
          d DrawSolution = ms
          d DrawExample  = ms >>= \s -> return $ p ||| strutX 2.0 ||| s