module BattleMap.View.Tile exposing (get_html, get_html_extra, get_content_html)
-- Elm -------------------------------------------------------------------------
import Html
import Html.Attributes
import Html.Events
-- Battle Map ------------------------------------------------------------------
import Constants.UI
import Constants.IO
import BattleMap.Struct.Location
import BattleMap.Struct.TileInstance
-- Local -----------------------------------------------------------------------
import Struct.Event
--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------
get_layer_html : (
      Int ->
      BattleMap.Struct.TileInstance.Border ->
      (Html.Html Struct.Event.Type)
   )
get_layer_html index border =
   (Html.div
      [
         (Html.Attributes.class ("tile-icon-f-" ++ (String.fromInt index))),
         (Html.Attributes.style
            "background-image"
            (
               "url("
               ++ Constants.IO.tile_assets_url
               ++ (BattleMap.Struct.TileInstance.get_border_class_id border)
               ++ "-f-"
               ++ (BattleMap.Struct.TileInstance.get_border_variant_id border)
               ++ ".svg)"
            )
         )
      ]
      []
   )
--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
get_content_html : (
      BattleMap.Struct.TileInstance.Type ->
      (List (Html.Html Struct.Event.Type))
   )
get_content_html tile =
   (
      (Html.div
         [
            (Html.Attributes.class "tile-icon-bg"),
            (Html.Attributes.style
               "background-image"
               (
                  "url("
                  ++ Constants.IO.tile_assets_url
                  ++ (BattleMap.Struct.TileInstance.get_class_id tile)
                  ++ "-bg.svg)"
               )
            )
         ]
         []
      )
      (Html.div
         [
            (Html.Attributes.class "tile-icon-bg"),
            (Html.Attributes.style
               "background-image"
               (
                  "url("
                  ++ Constants.IO.tile_assets_url
                  ++ (BattleMap.Struct.TileInstance.get_class_id tile)
                  ++ "-bg.svg)"
               )
            )
         ]
         []
      )
      ::
      (
         (Html.div
            [
               (Html.Attributes.class "tile-icon-dt"),
               (Html.Attributes.style
                  "background-image"
                  (
                     "url("
                     ++ Constants.IO.tile_assets_url
                     ++ (BattleMap.Struct.TileInstance.get_class_id tile)
                     ++ "-v-"
                     ++ (BattleMap.Struct.TileInstance.get_variant_id tile)
                     ++ ".svg)"
                  )
               )
            ]
            []
         )
         ::
         (List.indexedMap
            (get_layer_html)
            (BattleMap.Struct.TileInstance.get_borders tile)
         )
      )
   )
get_html : (
      Bool ->
      BattleMap.Struct.TileInstance.Type ->
      (Html.Html Struct.Event.Type)
   )
get_html display_cost tile =
   let tile_loc = (BattleMap.Struct.TileInstance.get_location tile) in
      (Html.div
         [
            (Html.Attributes.class "tile-icon"),
            (Html.Attributes.class "tiled"),
            (Html.Attributes.class
               (
                  "tile-variant-"
                  ++
                  (String.fromInt
                     (BattleMap.Struct.TileInstance.get_local_variant_ix tile)
                  )
               )
            ),
            (Html.Attributes.class "clickable"),
            (Html.Events.onClick
               (Struct.Event.TileSelected
                  (BattleMap.Struct.Location.get_ref tile_loc)
               )
            ),
            (Html.Attributes.style
               "top"
               (
                  (String.fromInt (tile_loc.y * Constants.UI.tile_size))
                  ++ "px"
               )
            ),
            (Html.Attributes.style
               "left"
               (
                  (String.fromInt (tile_loc.x * Constants.UI.tile_size))
                  ++ "px"
               )
            )
         ]
         (
            if (display_cost)
            then
               (
                  (Html.div
                     [
                        (Html.Attributes.class "tile-icon-cost")
                     ]
                     [
                        (Html.text
                           (String.fromInt
                              (BattleMap.Struct.TileInstance.get_cost tile)
                           )
                        )
                     ]
                  )
                  :: (get_content_html tile)
               )
            else (get_content_html tile)
         )
      )
get_html_with_extra : (
      Bool ->
      (List Html.Attributes.Attribute) ->
      BattleMap.Struct.TileInstance.Type ->
      (Html.Html Struct.Event.Type)
   )
get_html_with_extra display_cost extra_classes tile =
   let tile_loc = (BattleMap.Struct.TileInstance.get_location tile) in
      (Html.div
         (
            extra_classes
            ++
            [
               (Html.Attributes.class "tile-icon"),
               (Html.Attributes.class "tiled"),
               (Html.Attributes.class
                  (
                     "tile-variant-"
                     ++
                     (String.fromInt
                        (BattleMap.Struct.TileInstance.get_local_variant_ix
                           tile
                        )
                     )
                  )
               ),
               (Html.Attributes.class "clickable"),
               (Html.Events.onClick
                  (Struct.Event.TileSelected
                     (BattleMap.Struct.Location.get_ref tile_loc)
                  )
               ),
               (Html.Attributes.style
                  "top"
                  (
                     (String.fromInt (tile_loc.y * Constants.UI.tile_size))
                     ++ "px"
                  )
               ),
               (Html.Attributes.style
                  "left"
                  (
                     (String.fromInt (tile_loc.x * Constants.UI.tile_size))
                     ++ "px"
                  )
               )
            ]
         )
         (
            if (display_cost)
            then
               (
                  (Html.div
                     [
                        (Html.Attributes.class "tile-icon-cost")
                     ]
                     [
                        (Html.text
                           (String.fromInt
                              (BattleMap.Struct.TileInstance.get_cost tile)
                           )
                        )
                     ]
                  )
                  :: (get_content_html tile)
               )
            else (get_content_html tile)
         )
      )