{-# 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.Birthdate (Birthdate, filterBirthdayAt, filterBirthdayInside) import Model.Mail (mailSubject, mailBody) import Model.Config notifyTodayAndNextWeek :: [Birthdate] -> Config -> IO () notifyTodayAndNextWeek birthdates config = do currentDate <- getCurrentDate let birthdaysToday = filterBirthdayAt currentDate birthdates nextWeek <- getNextWeek birthdaysNextWeek <- filterBirthdaysNextWeek config nextWeek birthdates if length birthdaysToday > 0 || length birthdaysNextWeek > 0 then sendMail (mailTo config) (mailFrom config) (mailSubject birthdaysToday birthdaysNextWeek) (mailBody currentDate nextWeek birthdaysToday birthdaysNextWeek) else return () filterBirthdaysNextWeek :: Config -> SuccessiveDates -> [Birthdate] -> IO [Birthdate] filterBirthdaysNextWeek config nextWeek birthdates = (\currentDayOfWeek -> if T.toLower currentDayOfWeek == T.toLower (dayForNextWeekNotification config) then filterBirthdayInside nextWeek birthdates else [] ) <$> formatCurrentLocale "%A"