{-# LANGUAGE QuasiQuotes #-}

module Drasil.Generator.Website
  ( -- * Drasil's website generator
    genWebsite,
  )
where

import Control.Lens ((^.))

import Drasil.FileHandling (FileLayout, file, ps)
import Drasil.System (DrasilWebsite, systemdb, webRefs, indexDoc)
import Language.Drasil (Stage (Equational))
import Language.Drasil.Printers (Notation (Engineering), genHTML, genericCSS, piSys)
import Language.Drasil.Printing.Import (makeDocument)

-- | Generate Drasil's website (an HTML file with a CSS stylesheet).
genWebsite :: DrasilWebsite -> [FileLayout]
genWebsite :: DrasilWebsite -> [FileLayout]
genWebsite DrasilWebsite
dw =
  [ PathSegment -> Doc -> FileLayout
forall doc. Writeable doc => PathSegment -> doc -> FileLayout
file [ps|index.html|] (Doc -> FileLayout) -> Doc -> FileLayout
forall a b. (a -> b) -> a -> b
$ String -> Document -> Doc
genHTML String
"index" Document
pd,
    PathSegment -> Doc -> FileLayout
forall doc. Writeable doc => PathSegment -> doc -> FileLayout
file [ps|index.css|] Doc
genericCSS
  ]
  where
    printSetting :: PrintingInformation
printSetting = ChunkDB
-> Map UID Reference -> Stage -> Notation -> PrintingInformation
piSys (DrasilWebsite
dw DrasilWebsite -> Getting ChunkDB DrasilWebsite ChunkDB -> ChunkDB
forall s a. s -> Getting a s a -> a
^. Getting ChunkDB DrasilWebsite ChunkDB
forall c. HasSystemMeta c => Lens' c ChunkDB
Lens' DrasilWebsite ChunkDB
systemdb) (DrasilWebsite
dw DrasilWebsite
-> Getting (Map UID Reference) DrasilWebsite (Map UID Reference)
-> Map UID Reference
forall s a. s -> Getting a s a -> a
^. Getting (Map UID Reference) DrasilWebsite (Map UID Reference)
Lens' DrasilWebsite (Map UID Reference)
webRefs) Stage
Equational Notation
Engineering
    pd :: Document
pd = PrintingInformation -> Document -> Document
makeDocument PrintingInformation
printSetting (Document -> Document) -> Document -> Document
forall a b. (a -> b) -> a -> b
$ DrasilWebsite
dw DrasilWebsite
-> Getting Document DrasilWebsite Document -> Document
forall s a. s -> Getting a s a -> a
^. Getting Document DrasilWebsite Document
Lens' DrasilWebsite Document
indexDoc