module WebOutput where

import System.IO.Temp (openTempFile, createTempDirectory)
import Web.Browser (openBrowser)
import System.IO (hPutStr, hFlush)
import System.Directory (getTemporaryDirectory)
import System.FilePath.Posix (combine, FilePath)
import qualified Data.Text as T
import qualified Data.Text.IO as T

toTheBrowser content = do
  dir <- getTemporaryDirectory
  path <- writeContentToTempFile dir content "output.html"
  openBrowser path
    where
      writeContentToTempFile dir content fileName = do
        (path, handle) <- openTempFile dir "output.html"
        hPutStr handle content
        hFlush handle
        return path

data Resource = Resource {
  location :: FilePath,
  content :: T.Text
}

writeResource (Resource loc con) = T.writeFile loc con

manyToTheBrowser resources = do
  dir <- getTemporaryDirectory
  containing <- createTempDirectory dir "output"
  mapM writeResource (combined containing)
  (openBrowser . location . head) (combined containing)
  where
    combined dir = map (applyLocation (combine dir)) resources
    applyLocation f (Resource a b) = Resource (f a) b