{-# LANGUAGE OverloadedStrings #-} module Notification ( notifyTodayAndNextWeek ) where import qualified Data.Text as T import SendMail (sendMail) import Time (formatCurrentLocale) import Model.Date (getCurrentDate, getNextWeek, SuccessiveDates) import Model.Event (Event, filterBirthdayAt, filterBirthdayInside) import Model.Mail (mailSubject, mailBody) import Model.Conf notifyTodayAndNextWeek :: [Event] -> Conf -> IO () notifyTodayAndNextWeek events conf = do currentDate <- getCurrentDate let birthdaysToday = filterBirthdayAt currentDate events nextWeek <- getNextWeek birthdaysNextWeek <- filterBirthdaysNextWeek conf nextWeek events if length birthdaysToday > 0 || length birthdaysNextWeek > 0 then sendMail (mailTo conf) (mailFrom conf) (mailSubject birthdaysToday birthdaysNextWeek) (mailBody currentDate nextWeek birthdaysToday birthdaysNextWeek) else return () filterBirthdaysNextWeek :: Conf -> SuccessiveDates -> [Event] -> IO [Event] filterBirthdaysNextWeek conf nextWeek events = (\currentDayOfWeek -> if T.toLower currentDayOfWeek == T.toLower (dayForNextWeekNotification conf) then filterBirthdayInside nextWeek events else [] ) <$> formatCurrentLocale "%A"