{-# LANGUAGE LambdaCase #-}
module Server.Map.Snippets where

import qualified Data.Matrix as M

import Library.Types

catalogue :: [Map]
catalogue = convertCatalogue
  [ M.fromLists
    [ [ ' ', ' '  ]
    , [ ' ', ' '  ]
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ']
    , [ ' ', ' ', ' ']
    , [ ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', '#', ' ', ' ']
    , [ ' ', ' ', '#', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', '#', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', '#', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', '#', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', '#', '#', ' ', ' ']
    , [ ' ', ' ', '#', '#', '#', ' ', ' ']
    , [ ' ', ' ', '#', '#', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  , M.fromLists
    [ [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', '#', '#', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', '#', '#', ' ', ' ', ' ']
    , [ ' ', ' ', '#', ' ', ' ', '#', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    , [ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
    ]
  ]


convertCatalogue
  :: [ M.Matrix Char ]
  -> [ Map ]
convertCatalogue =
  map
  (fmap
    (\case
      '#' -> Wall
      ' ' -> Air
      x -> error ("unexpected element: " ++ [x])
      )
  )