module Imm.Maildir where

-- {{{ Imports
import Imm.Mail()
import Imm.Types

import Data.Time.Clock.POSIX

import Network.BSD

import System.Directory
import System.FilePath
import System.IO.Error
import System.Random
-- }}}

init :: FilePath -> IO Bool
init directory = do
    root <- try $ createDirectoryIfMissing True directory
    cur  <- try . createDirectoryIfMissing True . (directory </>) $ "cur"
    new  <- try . createDirectoryIfMissing True . (directory </>) $ "new"
    tmp  <- try . createDirectoryIfMissing True . (directory </>) $ "tmp"
    
    case (root, cur, new, tmp) of
        (Right _, Right _, Right _, Right _) -> return True
        _                                    -> return False

add :: FilePath -> Mail -> IO ()
add directory mail = do
    fileName <- getUniqueName
    writeFile (directory </> "new" </> fileName) (show mail)


getUniqueName :: IO String    
getUniqueName = do
    time     <- getPOSIXTime >>= (return . show)
    hostname <- getHostName
    rand     <- (getStdRandom $ randomR (1,100000) :: IO Int) >>= (return . show)
    
    return $ time ++ "." ++ rand ++ "." ++ hostname