{-# LANGUAGE OverloadedStrings #-}

-- |
--
-- Copyright: (c) Eduardo Trujillo, 2016
-- License: Apache
-- Stability: experimental
--
-- Utility Wai applications.
module Network.Wai.Serve.Applications where

import Data.Maybe  (fromMaybe, mapMaybe)
import Data.String (fromString)

import Data.Text                      (pack)
import Network.Wai                    (Application)
import Network.Wai.Application.Static (defaultWebAppSettings, ss404Handler,
                                       ssAddTrailingSlash, ssIndices, ssMaxAge,
                                       ssRedirectToIndex, staticApp)
import Network.Wai.Middleware.Vhost   (redirectTo)
import WaiAppStatic.Types             (MaxAge (MaxAgeSeconds), toPiece)

-- | An application for static websites.
--
-- It serves files from the provided path. It defaults to `_site` which is the
-- default location for Hakyll websites.
staticSite :: Maybe FilePath -> Application
staticSite path = staticApp
  (defaultWebAppSettings . fromString $ fromMaybe "_site" path)
  { ssIndices = mapMaybe (toPiece . pack) ["index.html"]
  , ssRedirectToIndex = False
  , ssAddTrailingSlash = True
  , ss404Handler = Just redirectHome
  , ssMaxAge = MaxAgeSeconds 604801
  }

-- | Handler for redirecting requests to the root of the site.
--
-- Useful for 404 handlers.
redirectHome :: Application
redirectHome _ sendResponse = sendResponse $ redirectTo "/"