{-# LANGUAGE OverloadedStrings #-} module Notification ( todayAndNextWeek ) 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 todayAndNextWeek :: [Birthdate] -> Config -> IO () todayAndNextWeek birthdates config = do currentDate <- getCurrentDate birthdaysToday <- filterBirthdaysToday birthdates birthdaysNextWeek <- filterBirthdaysNextWeek birthdates config if length birthdaysToday > 0 || length birthdaysNextWeek > 0 then sendMail (mailTo config) (mailFrom config) (mailSubject birthdaysToday birthdaysNextWeek) (mailBody currentDate birthdaysToday birthdaysNextWeek) else return () filterBirthdaysToday :: [Birthdate] -> IO [Birthdate] filterBirthdaysToday birthdates = do currentDate <- getCurrentDate return (filterBirthdayAt currentDate birthdates) filterBirthdaysNextWeek :: [Birthdate] -> Config -> IO [Birthdate] filterBirthdaysNextWeek birthdates config = do currentDayOfWeek <- formatCurrentLocale "%A" if T.toLower currentDayOfWeek == T.toLower (dayForNextWeekNotification config) then do (begin, end) <- getNextWeek return (filterBirthdayBetween begin end birthdates) else return []