{-# LANGUAGE OverloadedStrings #-} module Notification ( today , nextWeek ) where import qualified Data.Text as T import SendMail (sendMail) import Time (formatCurrentLocale) import Model.Date (getCurrentDate, getNextWeek) import Model.Birthdate (Birthdate, filterBirthdayAt, filterBirthdayBetween) import Model.Mail (mailSubject, mailBody) import Model.Config today :: [Birthdate] -> Config -> IO () today 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 () nextWeek :: [Birthdate] -> Config -> IO () nextWeek birthdates config = do currentDayOfWeek <- formatCurrentLocale "%A" if T.toLower currentDayOfWeek == T.toLower (dayForNextWeekNotification config) then do (begin, end) <- getNextWeek let birthdays = filterBirthdayBetween begin end birthdates if not (null birthdays) then sendMail (mailTo config) (mailFrom config) "" "" else return () else return ()