{-# LANGUAGE CPP, TemplateHaskell #-}

module Happstack.Server.YUI.Bundle
  ( isYUIFile
  , readYUIFile
  ) where

import Data.ByteString (ByteString)

#if EMBED
import Data.FileEmbed            (embedDir)
import Data.Map                  (Map, (!), fromList, member)
#else
import Paths_happstack_yui       (getDataFileName)
import System.Directory          (doesFileExist)
import qualified Data.ByteString as B
#endif

#if EMBED
bundle :: Map FilePath ByteString
bundle = fromList $(embedDir "bundle")
#endif

-- | Tells if a file is included in the YUI bundle.
--
-- >>> isYUIFile "yui/yui-min.js"
-- True
isYUIFile :: FilePath -> IO Bool
#if EMBED
isYUIFile name = return $ member name bundle
#else
isYUIFile name = getDataFileName ("bundle/" ++ name) >>= doesFileExist
#endif

-- | Reads the contents of a file included in the YUI bundle.
readYUIFile :: FilePath -> IO ByteString
#if EMBED
readYUIFile name = return $ bundle ! name
#else
readYUIFile name = getDataFileName ("bundle/" ++ name) >>= B.readFile
#endif