{-# LANGUAGE OverloadedStrings #-} module Main ( main ) where import System.IO (stderr) import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T import Date (getCurrentDate) import Birthdate (Birthdate, filterBirthdayAt) import BirthdateParser (parseBirthdates) import Mail (mailSubject, mailBody) import SendMail (sendMail) import Config birthdatePath :: FilePath birthdatePath = "birthdates.csv" configPath :: FilePath configPath = "config.txt" main :: IO () main = do eitherBirthdates <- parseBirthdates <$> T.readFile birthdatePath eitherConfig <- getConfig configPath case (eitherBirthdates, eitherConfig) of (Left err, _) -> birthdateError err (_, Left err) -> configError err (Right birthdates, Right config) -> sendNotificationForBirthdayToday birthdates config birthdateError :: Text -> IO () birthdateError err = T.hPutStr stderr $ T.concat [ "Error while parsing file " , T.pack birthdatePath , ":\n" , err ] configError :: Text -> IO () configError err = T.hPutStr stderr $ T.concat [ "Error while parsing config file " , T.pack configPath , ":\n" , err ] sendNotificationForBirthdayToday :: [Birthdate] -> Config -> IO () sendNotificationForBirthdayToday birthdates config = do currentDate <- getCurrentDate let birthdays = filterBirthdayAt currentDate birthdates if not (null birthdays) then sendMail (mailTo config) (mailFrom config) (mailSubject birthdays) (mailBody currentDate birthdays) else return ()