module Dodge.Placement.TopDecoration where
import Dodge.Data
import Dodge.Room.Foreground
--import Dodge.LevelGen.Data
import Shape
import Geometry
import Color

decorationToShape :: DecorationShape
    -> Float -> Float -> Float -> Color -> Color -> Shape
decorationToShape dec = case dec of
    PLUS        -> plusDecoration
    SQUARE      -> squareDecoration
    CIRCLE      -> circleDecoration
    THREELINES  -> threeLineDecoration

midBarDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
midBarDecoration w h z _ c = embossingR
    <> rotateSH pi embossingR
    <> colorSH c (thinHighBar (z + 7) (V2 (-0.3*w) 0) (V2 (0.3*w) 0))
  where
    w' = 0.3 * w
    embossingR = colorSH c $ prismPoly 
        [V3 w h z,V3 w (0.3*h) 41,V3 w (-0.3*h) 41,V3 w (-h) z]
        [V3 w' h z,V3 w' (0.3*h) 41,V3 w' (-0.3*h) 41,V3 w' (-h) z]

fourEmbossDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
fourEmbossDecoration w h z _ c = colorSH c $ foldMap f [(w,h),(-w,h),(w,-h),(-w,-h)]
  where
    f (a,b) = translateSH (V3 (a/2) (b/2) z) embossing
    embossing = upperPrismPolyHalf 10 $ reverse $ rectNSWE (h/2) (-h/2) (-w/2) (w/2)

plusDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
plusDecoration w h z _ c = colorSH c $ thinHighBar z (V2 w 0) (V2 (-w) 0)
    <> thinHighBar z (V2 0 h) (V2 0 (-h))

squareDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
squareDecoration w h z _ col = colorSH col $ foldMap f 
    [(w',-w',h',h')
    ,(w',-w',-h',-h')
    ,(w',w',h',-h')
    ,(-w',-w',h',-h')
    ]
  where
    w' = w - 1.5
    h' = h - 1.5
    f (a,c,b,d) = thinHighBar z (V2 a b) (V2 c d)

circleDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
circleDecoration w _ z _ c = colorSH c $ foldMap toprail (take 8 [0,pi/4..]) 
  where
    toprail a = rotateSH a $ thinHighBar z (V2 0 w) (rotateV (pi/4) $ V2 0 w)

threeLineDecoration :: Float -> Float -> Float -> Color -> Color -> Shape
threeLineDecoration w h z _ col = colorSH col $ foldMap f 
    [(w',-w',h',h')
    ,(w',-w',0,0)
    ,(w',-w',-h',-h')
    ]
  where
    w' = w - 1.5
    h' = h - 1.5
    f (a,c,b,d) = thinHighBar z (V2 a b) (V2 c d)
